Nginx не может передать трафик приложению Flask и uwsgi

Я пытаюсь развернуть приложение Flask и UWSGI с Nginx, все работает, и я могу заставить свое приложение работать на моем домене: test.example.com:8080,

Проблема в том, что я не могу заставить его работать под портом 80 по умолчанию, я получаю следующее сообщение об ошибке от Nginx, когда пытаюсь просмотреть test.example.com:

2016/09/02 10:21:29 [error] 2947#2947: *3 no live upstreams while connecting to upstream, client: 75.xxx.xxx.136, server: test.example.com, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://localhost", host: "test.example.com", referrer: "http://test.example.com/"

Это моя команда uwsgi:

uwsgi --socket 8080 --chdir /var/www/test.example.com --protocol=http --module myapp:app

И это мой конфиг Nginx:

server {

    listen 80;

    root /var/www/test.example.com;
    server_name test.example.com;

    location / {
        include         uwsgi_params;
        uwsgi_pass   0.0.0.0:8080;
    uwsgi_param SCRIPT_NAME /myapp;
    }
}

Nginx не может просто передать трафик на порт 8080 из 80 для моего сервера, я не знаю почему.

1 ответ

Решение

Ваша UWSGI командная строка неверна. Подтвердите, проверив, есть ли у вас файловый сокет с именем 8080 под /var/www/test.example.com, Если это так, вы перепутали сокеты TCP и UNIX.

Также, --protocol http означает, что вы должны использовать протокол HTTP для доступа к uwsgi, а не к собственному uwsgi, который также поддерживает nginx. Удалите эту опцию или используйте proxy_pass вместо uwsgi_pass,

Правильная командная строка будет:

uwsgi --socket :8080 --chdir /var/www/test.example.com --module myapp:app

Чтобы повысить безопасность, вы также можете указать локальный IP-адрес сайта для прослушивания uwsgi, поэтому используйте, например, 127.0.0.1:8080 вместо просто :8080,

Еще один способ - использовать сокеты UNIX вместо прослушивания tcp/8080, указав путь к сокету для командной строки uwsgi и используя uwsgi_pass unix:/file/path/passed/to/socket в конфигурации nginx. Это было бы еще более безопасно, потому что вы можете контролировать права доступа сокета с помощью разрешений каталога, ограничивая способность локального пользователя также причинять вред.

Другие вопросы по тегам