Jump to content


Photo
- - - - -

nginx + fastcgi + python-проект


  • Please log in to reply
9 replies to this topic

#1 Yarra

Yarra

    Псих ненормальный

  • Moderators
  • PipPipPipPipPip
  • 13164 posts
319
Очень хороший
  • Город:Степка 8)

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
  • 0

Люди должны умереть
Убью лошадь, за каплю никотина


#2 *soulburner*

*soulburner*

    You have reached level cap

  • True Members
  • PipPipPipPipPip
  • 5619 posts
225
Очень хороший
  • Пол:Мужчина

Posted 10 June 2013 - 14:44

на вопросы не отвечу, сам не в зуб ногой :)

скажу лишь что сам не раз сталкивался, что у людей стоит nginx, который отвечает за статику, а всю динамику кидает апачу.

хотя, на моем серве админ настроил связку nginx+php без всяких апачей.
  • 0

#3 Yarra

Yarra

    Псих ненормальный

  • Moderators
  • PipPipPipPipPip
  • 13164 posts
319
Очень хороший
  • Город:Степка 8)

Posted 10 June 2013 - 16:11

Дык с динамикой апача я сделал...
  • 0

Люди должны умереть
Убью лошадь, за каплю никотина


#4 miver

miver

    красноглазег

  • Moderators
  • PipPipPipPipPip
  • 3851 posts
75
Хороший
  • Пол:Мужчина
  • Город:Арбиталь
  • Интересы:Linux FreeBSD домашние сети

Posted 10 June 2013 - 16:16

у меня тоже .fcgi файлик из вики nginx не заработал. использую uwcgi и все круто.
  • 0

#5 Yarra

Yarra

    Псих ненормальный

  • Moderators
  • PipPipPipPipPip
  • 13164 posts
319
Очень хороший
  • Город:Степка 8)

Posted 10 June 2013 - 17:12

Кстати, через uwsgi Как отдельный сервак для приложений?
потому как я у нгинкса видел mod_uwsgi но так и не опнял то ли это настройка для работы с uwsgi-серваком, то ли еще какаято хрень навроде fastcgi
  • 0

Люди должны умереть
Убью лошадь, за каплю никотина


#6 DarkTwin

DarkTwin

    Пернатый пЫнгвЫн

  • True Members
  • PipPipPipPipPip
  • 3227 posts
293
Очень хороший
  • Пол:Мужчина

Posted 10 June 2013 - 19:05

Yarra, как говорят нам тут http://wiki.nginx.org/NgxWSGIModule

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;
}

Размышления на тему того что джанга и вся фигня.
  • 0

"Люди забыли эту истину, - сказал Лис, - но ты не забывай: ты навсегда в ответе за всех, кого приручил..."

Антуан де Сент-Экзюпери. Маленький принц


#7 Yarra

Yarra

    Псих ненормальный

  • Moderators
  • PipPipPipPipPip
  • 13164 posts
319
Очень хороший
  • Город:Степка 8)

Posted 10 June 2013 - 23:41

джанго не вариант...

Ладно, я примерно понял куда копать, всем спасибо :)
  • 0

Люди должны умереть
Убью лошадь, за каплю никотина


#8 Yarra

Yarra

    Псих ненормальный

  • Moderators
  • PipPipPipPipPip
  • 13164 posts
319
Очень хороший
  • Город:Степка 8)

Posted 11 June 2013 - 11:11

хмхм. товарищи, а, может быть тогда для работы сабжевой связки нужен отдельный питоновским fastcgi модуль?
  • 0

Люди должны умереть
Убью лошадь, за каплю никотина


#9 DarkTwin

DarkTwin

    Пернатый пЫнгвЫн

  • True Members
  • PipPipPipPipPip
  • 3227 posts
293
Очень хороший
  • Пол:Мужчина

Posted 11 June 2013 - 11:33

fastcgi модуль?

Пакет.
Да нужен.
Цитируя себя же выше

mod_wsgi является реализацией шлуза межуд Python WEB-сервер и Nginx.


  • 0

"Люди забыли эту истину, - сказал Лис, - но ты не забывай: ты навсегда в ответе за всех, кого приручил..."

Антуан де Сент-Экзюпери. Маленький принц


#10 Yarra

Yarra

    Псих ненормальный

  • Moderators
  • PipPipPipPipPip
  • 13164 posts
319
Очень хороший
  • Город:Степка 8)

Posted 13 June 2013 - 00:06

Хе. Тестовый hello world заработал таки!
все оказалось весьма просто: виноваты мои кривые руки.
Дело в том что в процессе работы запускал скриптик я от рута, а нгинкс работает под юзером нгинкса.
Сооснно и сокет, создаваемый 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

Люди должны умереть
Убью лошадь, за каплю никотина



0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users