nginx + fastcgi + python-проект
#1
Posted 10 June 2013 - 10:55
Я очень сильно плаваю в терминологии и теории работы этой связки, но может кто-нибудь сможет просветить или подкинуть литературки
В общем, если я правильно понимаю, для работы питон-проектов под nginx есть разные варианты.
Самый простой - apache + mod_python.
Но у меня на компе стоит nginx.
Поэтому сначала я попробовал проксирование через nginx к apach'у. Получилось, но дальше решили усложнить задачу и сделать под чистым nginx, тем более что там есть fastcgi, который вроде бы как умеет python-проекты.
И вот тут встала заковырка. Если я запускаю проект локальну через питон (если я правильно пнимаю его поднимает что-то встроенное во flask) без участия nginx - как-то работает.
Но если я запускаю файлик .fcgi, написанный по ману, - ничего не происходит.
Можно было бы заморочиться с uwcgi, но не хочется плодить лишние сущности в системе, если есть возможность обойтись без них.
Если я правильно понимаю вся эта связка работает так, что делается файлег .fcgi, запускается, после чего через nginx и fastcgi отдается клиентам.
А теперь вопросы:
1. может ли кто-нибудь запульнуть документацией где на пальцах рассказывается как это все работает?
2. правильно ли я понимаю принцип работы python-проектов: запускается скрипт .fcgi, который начинается ждать по локальному порту обращение от web-сервера, при обращении генерится нужная клиенту страница?
3. как дома окажусь - выложу логи, потому что я уже излазил яндекс и гугл и перепробовал все что можно, но так и не получилось настроить nginx чтобы проект заработал. или хотя бы простой скриптик, который под связкой nginx-proxy + apache + mod python работал
4. что делать и кто виноват? (риторический )
P.S. питоновский проект самописный, это не django
Люди должны умереть
Убью лошадь, за каплю никотина
#2
Posted 10 June 2013 - 14:44
скажу лишь что сам не раз сталкивался, что у людей стоит nginx, который отвечает за статику, а всю динамику кидает апачу.
хотя, на моем серве админ настроил связку nginx+php без всяких апачей.
#3
Posted 10 June 2013 - 16:11
Люди должны умереть
Убью лошадь, за каплю никотина
#4
Posted 10 June 2013 - 16:16
#5
Posted 10 June 2013 - 17:12
потому как я у нгинкса видел mod_uwsgi но так и не опнял то ли это настройка для работы с uwsgi-серваком, то ли еще какаято хрень навроде fastcgi
Люди должны умереть
Убью лошадь, за каплю никотина
#6
Posted 10 June 2013 - 19:05
По Русски это примерно такmod_wsgi is an implementation of the Python Web Server Gateway Interface v1.0 for the Nginx web server.
Что говорит нам что в питоне должен присутствовать соответствующей пакет.mod_wsgi является реализацией шлуза межуд Python WEB-сервер и Nginx.
Размышления на тему того что джанга и вся фигня.location / {
wsgi_pass /path/to/nginx/django.py;
}
"Люди забыли эту истину, - сказал Лис, - но ты не забывай: ты навсегда в ответе за всех, кого приручил..."
Антуан де Сент-Экзюпери. Маленький принц
#7
Posted 10 June 2013 - 23:41
Ладно, я примерно понял куда копать, всем спасибо
Люди должны умереть
Убью лошадь, за каплю никотина
#8
Posted 11 June 2013 - 11:11
Люди должны умереть
Убью лошадь, за каплю никотина
#9
Posted 11 June 2013 - 11:33
Пакет.fastcgi модуль?
Да нужен.
Цитируя себя же выше
mod_wsgi является реализацией шлуза межуд Python WEB-сервер и Nginx.
"Люди забыли эту истину, - сказал Лис, - но ты не забывай: ты навсегда в ответе за всех, кого приручил..."
Антуан де Сент-Экзюпери. Маленький принц
#10
Posted 13 June 2013 - 00:06
все оказалось весьма просто: виноваты мои кривые руки.
Дело в том что в процессе работы запускал скриптик я от рута, а нгинкс работает под юзером нгинкса.
Сооснно и сокет, создаваемый fastcgi создавался от имени рута, и, как это вполне логично, нгинкс не мог с этим сокетом работать.
Теперь осталось разобраться, почему при запуске тестового проекта нигнкс выдает 404 ошибку.
Ура! Тестовое приложение заработало!
Видимо косяк нгинкса: если задавать http://myaddr/test/ - все работает, если же http://myaddr/test - выдает Not Found.
Что я сделал не так:
server { listen 80; server_name 5.19.255.193; server_name_in_redirect off; access_log /var/log/nginx/py_fcgi.access_log combined; error_log /var/log/nginx/py_fcgi.error_log debug; root /var/www/localhost/htdocs/; #return 301 https://$server_name$request_uri; # enforce https location /test { fastcgi_pass unix:/tmp/test.sock; include fastcgi_params; fastcgi_split_path_info ^(/test)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_NAME $fastcgi_script_name; } }
видимо таки основые косяки: когда тестировал не подумал о запуске из-под юзера нгинкса + не знал про слеш. Оттуда столько секса из ничего.
Правда, почему-то под fast-cgi выкидывает сюрпризы sqlalchemy, но это другая песня.
Хотя, на ноуте, под uwsgi таки веселых приколов не наблюдал.
Хотя, надо признать с uwsgi работать приятнее. Там есть интересный Emperor-режим и всякие вкусности, против того что при использовании fastcgi от нгинкса надо руками стартовать скрипт.
Люди должны умереть
Убью лошадь, за каплю никотина
0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users