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

时间:2014-07-16 03:09:18

标签: python nginx flask uwsgi

当我运行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的/位点可用/ 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 个答案:

答案 0 :(得分:-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问题,请参阅此thread可能会对您有所帮助

此外,最好运行uwsgi以阻止在root下运行,而不是在当前用户下运行。

EDIT2:

我建议您尝试使用反向代理传递代替uwsgi params

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

更改端口号