如何使用nginx、uwsgi和flask防止此错误网关?

1 投票
1 回答
1563 浏览
提问于 2025-04-18 13:30

我在运行 uwsgi --ini /root/code/poetree/uwsgi.ini 时,总是遇到一个502错误,提示网关不良。不过,从最后的日志来看,应用程序启动得很好,工作进程也正常启动(可以通过 ps aux | grep uwsgi 查看)。还有一个观察是,下面这个服务器配置(在 /etc/nginx/sites-available/conf 中)在获取静态数据(比如 /audio 里的内容)时工作得很好,但在尝试加载动态页面时却出现了网关错误。

如果我改用 app.flask_app.run(host='0.0.0.0', port=8080),那么页面就能正常显示,这让我觉得问题出在 uwsgi 和 nginx 之间。

uwsgi.ini

[uwsgi]
base = /root/code/poetree
app = app
module = %(app)
callable = flask_app
pythonpath = /usr/local/lib/python2.7/dist-packages
socket = %(base)/%n.sock                                                                                                                                                         
master = true
processes = 5
chmod-socket    = 666
logto = /var/log/uwsgi/%n.log

/etc/nginx/sites-available/conf

server {
        listen 80;

        root /;

        server_name <IP_ADDRESS>

        location /audio/ {
                root /data;
                try_files $uri $uri/ =404;
        }
        location / {
                try_files $uri @poetree;
        }
        location @poetree {
                 include uwsgi_params;
                 uwsgi_pass unix:/root/code/poetree/uwsgi.sock;
        }
}

/var/log/uwsgi/uwsgi.log:

*** Starting uWSGI 2.0.6 (64bit) on [Wed Jul 16 11:48:13 2014] ***
compiled with version: 4.8.2 on 16 July 2014 11:38:51
os: Linux-3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014
nodename: cinjon
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 1
current working directory: /root/code/poetree
detected binary path: /usr/local/bin/uwsgi
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 
your processes number limit is 3751
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to UNIX address /root/code/poetree/uwsgi.sock fd 3
Python version: 2.7.6 (default, Mar 22 2014, 23:03:41)  [GCC 4.8.2]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x11af010
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 436608 bytes (426 KB) for 5 cores
*** Operational MODE: preforking ***
added /usr/local/lib/python2.7/dist-packages/ to pythonpath.
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x11af010 pid: 580 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 580)
spawned uWSGI worker 1 (pid: 583, cores: 1)
spawned uWSGI worker 2 (pid: 584, cores: 1)
spawned uWSGI worker 3 (pid: 585, cores: 1)
spawned uWSGI worker 4 (pid: 586, cores: 1)
spawned uWSGI worker 5 (pid: 587, cores: 1)

1 个回答

-1

我假设这些内容解释了问题,如果我哪里说错了,请纠正我。

!!! no internal routing support, rebuild with pcre support !!!
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 

要解决uwsgi中的pcre问题,可以参考这个帖子,可能对你有帮助。

另外,建议你运行uwsgi时不要以root用户身份运行,而是使用当前用户。

编辑2:

我建议你尝试使用反向代理,而不是uwsgi params

location / {
        proxy_pass  http://127.0.0.1:5000/;
        proxy_set_header    Host    $host;
        proxy_set_header    X-Real-IP   $remote_addr;
    }

更改端口号

撰写回答