После долгого пребывания на виртуальном хостинге я перемещаю свои вещи на VPS, и возникла необходимость узнать о Nginx + uWSGI для развертывания моих приложений (python). Потратив пару недель на изучение основ, я настраиваю свою локальную машину (ubuntu 11.04) для запуска своих приложений на Nginx + uWSGI. Я использую Руководство по линодам Ubuntu 10.10 "Hello world".
Настройка была простой, но когда я запустил http://localhost/
или http://127.0.0.1
Я каждый раз получаю 502 Bad Gateway. Оцените указатели о том, как настроить работу.
Мой nginx.conf: [Я сделал резервную копию конфигурации nginx по умолчанию (которая работает нормально и показывает "Добро пожаловать в Nginx", когда я нажимаю http://localhost/
) и заменил его этой настраиваемой конфигурацией nginx из руководства по линодам, которое связывает nginx с сервером uWSGI. ]
worker_processes 1;
events { worker_connections 1024; }
http {
server {
listen 80;
server_name localhost;
access_log /srv/www/myHostname/logs/access.log;
error_log /srv/www/myHostname/logs/error.log;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9001;
}
location /static {
root /srv/www/myHostname/public_html/static/;
index index.html index.htm;
}
}
}
Моя конф. UWSGI точно такой же, как описано в руководстве по линодам, которое я привел выше, с одним изменением, которое в моем примере заменено на «myHostname» в их примере. В моем журнале ошибок nginx ошибок нет. Nginx установлен в /opt/nginx
и uWSGI находится на /opt/uwsgi
как указано в руководстве по ссылке выше. Я не касался файлов, о которых не говорится в руководстве.
Что я пытался решить до сих пор:
sites-enabled
и т. д., чтобы добавить мой пользовательский виртуальный хост, указанный выше, оставив неизменным nginx.conf по умолчанию (за исключением инструкции include, указывающей на виртуальный хост в разрешенных сайтах). Nginx даже не запускался, и журнал ошибок сообщил об ошибке «конфликтующее имя сервера« localhost »на 0.0.0.0:80, проигнорировано».Вчера я видел ваш пост, просто искал ответ на ту же проблему. Наконец, сегодня я добрался до корня проблемы.
Я предполагаю, что вы указываете chdir в своем файле конфигурации .ini как каталог, в котором находится ваш проект. Я имею в виду, что если, например, ваш проект - «myproject» и он находится в каталоге «/ var / www / myproject», вы указываете «/ var / www» в качестве chdir.
Итак, путь для всех внутренних ресурсов не определен должным образом, и интерпретатор Python (может быть, вы используете Django?) Не доходит до них. Хорошо, я объясню, как решение работает в проекте Django. Например, предположим, что у вас есть приложение внутри вашего проекта под названием «app1»; в вашем модуле представлений вы вызываете формы, определенные в вашем модуле форм; вы будете делать это так:
from app1.forms import *
Ладно? Дело в том, что путь для uwsgi не определен. Теперь вы должны определить это так:
from myproject.app.forms import *
и вы увидите, что теперь все работает. Больше не надо 502 Неверный шлюз у вас появятся ошибки :)
Да, я знаю, что добавлять myproject - не очень элегантно. для каждого вызова внутреннего ресурса. Итак, вы можете просто добавить это в свой файл settings.py:
sys.path.append('/var/www/myproject/')
Замените '/ var / www /' на путь, по которому ваш проект расположен на вашем компьютере. С этим крошечным решением каждый начал работать на меня :)
Надеюсь, мой комментарий вам поможет.
Привет, Хосе