Я пытаюсь развернуть приложение 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 для моего сервера, я не знаю почему.
Ваша командная строка uwsgi неверна. Подтвердите, проверив, есть ли у вас файловый сокет с именем 8080
под /var/www/test.example.com
. Если он там есть, вы перепутали сокеты TCP и UNIX.
Также, --protocol http
означает, что для доступа к uwsgi следует использовать протокол HTTP, а не собственный протокол 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. Это было бы еще безопаснее, потому что вы можете контролировать права доступа сокета с разрешениями каталога, ограничивая также возможность локального пользователя причинять вред.