Nginx
Nginx 無法將流量傳遞給 Flask 應用程序和 uwsgi
我正在嘗試使用 Nginx 部署 Flask 和 uwsgi 應用程序,一切正常,我可以讓我的應用程序在我的域上工作:
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 不能只為我的伺服器將流量從 80 傳遞到埠 8080,我不知道為什麼。
您的 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
為了提高安全性,您可能還想為 uwsgi 指定站點本地 IP 以進行偵聽,因此請使用 example
127.0.0.1:8080
而不是 just:8080
.另一種方法是通過為 uwsgi 命令行指定套接字路徑並
uwsgi_pass unix:/file/path/passed/to/socket
在 nginx 配置中使用來使用 UNIX 套接字而不是監聽 tcp/8080。那會更加安全,因為您可以使用目錄的權限來控制套接字的訪問權限,從而限製本地使用者造成傷害的能力。