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