Nginx 无法将流量传递给 Flask 应用程序和 uwsgi

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 端口,我不知道为什么。

答案1

8080您的 uwsgi 命令行是错误的。请检查您是否在 下有一个名为 的文件套接字,以进行确认/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,因此使用例如,127.0.0.1:8080而不仅仅是:8080

另一种方法是使用 UNIX 套接字,而不是通过为 uwsgi 命令行指定套接字路径并uwsgi_pass unix:/file/path/passed/to/socket在 nginx 配置中使用来监听 tcp/8080。这会更加安全,因为您可以使用目录的权限控制套接字的访问权限,从而限制本地用户造成危害的能力。

相关内容