Назад | Перейти на главную страницу

Nginx + uWSGI на localhost * всегда * дает 502 Bad Gateway. Есть идеи, как это решить?

После долгого пребывания на виртуальном хостинге я перемещаю свои вещи на 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 как указано в руководстве по ссылке выше. Я не касался файлов, о которых не говорится в руководстве.

Что я пытался решить до сих пор:

  1. Запуск, остановка и перезапуск служб nginx и uWSGI после изменения их конфигураций.
  2. Пробовал макет debian с sites-enabled и т. д., чтобы добавить мой пользовательский виртуальный хост, указанный выше, оставив неизменным nginx.conf по умолчанию (за исключением инструкции include, указывающей на виртуальный хост в разрешенных сайтах). Nginx даже не запускался, и журнал ошибок сообщил об ошибке «конфликтующее имя сервера« localhost »на 0.0.0.0:80, проигнорировано».
  3. Прочтите еще несколько руководств по настройке Nginx + uWSGI, не углубляясь в решение проблемы.

Вчера я видел ваш пост, просто искал ответ на ту же проблему. Наконец, сегодня я добрался до корня проблемы.

Я предполагаю, что вы указываете 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 /' на путь, по которому ваш проект расположен на вашем компьютере. С этим крошечным решением каждый начал работать на меня :)

Надеюсь, мой комментарий вам поможет.

Привет, Хосе