我正在尝试使用 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 指定站点本地 IP 以进行侦听,因此请使用 example
127.0.0.1:8080
而不是 just:8080
.另一种方法是通过为 uwsgi 命令行指定套接字路径并
uwsgi_pass unix:/file/path/passed/to/socket
在 nginx 配置中使用来使用 UNIX 套接字而不是监听 tcp/8080。那会更加安全,因为您可以使用目录的权限来控制套接字的访问权限,从而限制本地用户造成伤害的能力。