Flask Nginx uWSGI 504网关超时错误

4

我急切地试图找出问题所在,为什么我无法使用uWSGI nginx和Ubuntu服务器部署我的flask应用程序。

以下是我的nginx错误日志中的错误信息:

2019/05/12 09:00:19 [error] 10154#10154: *1 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 24.27.57.18, server: itinareport.tk, request: "POST /login HTTP/1.1", upstream: "uwsgi://unix:/home/pinchrep2/itinarep/itinarep.sock", host: "www.itinareport.tk", referrer: "http://www.itinareport.tk/login"

在使用 Flask、uWSGI 和 Nginx 进行所有设置后,我可以输入我的域名并进入我的网页(登录页面)。但是,在尝试登录时,页面暂停了一段时间,然后我收到了 504 网关超时的错误信息。

请告诉我该怎么办。这是我第一次部署应用程序,尝试了不同的配置花费了我大约一周的时间。需要说明的是,我通过 SSH 隧道将我的 Flask 应用程序连接到另一台服务器上的数据库。不确定是否也会导致此问题。如果可能,请帮忙或指点正确的方向。

这是我的服务器块配置文件

server{
    listen 80;                                                                                                                           
    server_name itinareport.tk www.itinareport.tk;                                                                                       

    location / {                                                                                                                         
    include uwsgi_params;                                                                                                            
    uwsgi_pass unix:/home/pinchrep2/itinarep/itinarep.sock;                                                                          
}                                                                                                                                    

这是我的服务文件
[Unit]                                                                                                                                  
Description=uWSGI instance to serve itinarep
After=network.target

[Service]
User=pinchrep2
Group=www-data
WorkingDirectory=/home/pinchrep2/itinarep
Environment="PATH=/home/pinchrep2/itinarep/it_venv/bin"
ExecStart=/home/pinchrep2/itinarep/it_venv/bin/uwsgi --ini itinarep.ini

[Install]
WantedBy=multi-user.target  

这里是我的ini文件
[uwsgi]
module = wsgi:app

master = true
processes = 5

socket = itinarep.sock
chmod-socket = 660
vacuum = true

die-on-term=true 

@gerwin 嘿,谢谢你这么快回复。我的主要Python文件非常大。当我使用Python运行应用程序时,我能够访问我的服务器公共IP和指定的端口,并且能够完美地登录。当我运行脚本uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app时,我也收到了相同的成功行为。您想看到Python文件的特定部分吗? - Andrew Venson
我认为可能是登录路由超时了,但似乎不是这种情况。你能发布一下绑定服务器到套接字的部分吗? - gerwin
@gerwin 没问题。我按照这个指南 https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04 去做了。我不确定哪一部分会绑定端口。我也是一个完全的新手。如果这些都没有帮助到你,我很抱歉。 - Andrew Venson
1
你能获取服务日志文件吗?也许有错误。你可以使用journalctl来获取它。 - gerwin
这些是itinarep.service中的最后几条消息: May 12 06:04:07 pbxreports systemd[1]: 已启动uWsgi实例以提供itinarep服务。 May 12 06:04:07 pbxreports uwsgi[7373]: [uWSGI] 正在从itinarep.ini获取INI配置 May 12 06:04:07 pbxreports uwsgi[7373]: *** 在[Sun May 12 06:04:07 2019]上启动uWSGI 2.0.18 (64bit) *** May 12 06:04:07 pbxreports uwsgi[7373]: 编译版本:2019年5月12日05:07:01的8.3.0 May 12 06:04:07 pbxreports uwsgi[7373]: 操作系统:Linux-5.0.0-13-generic #14-Ubuntu SMP Mon Apr 15 14:59:14 UTC 2019 - Andrew Venson
显示剩余2条评论
1个回答

3
有时候在部署使用 Keras 等库的 Flask 应用时,可能会遇到 uWSGI 中线程相关的问题。
你可以在 myproject.ini 文件中进行以下修改来解决这个问题:
1. 添加以下设置到 myproject.ini 文件中。
master = false <-------- this
processes = 1 <--------- and this
  1. 在你的myproject.ini文件中添加cheaper = 0
  2. 在你的myproject.ini文件中添加lazy-apps = true

现在,你的myproject.ini文件可能会像这样:

[uwsgi]
module = wsgi:app

master = false <-------- this
processes = 1 <--------- and this
socket = myproject.sock
chmod-socket = 660
vacuum = true
die-on-term = true

cheaper = 0 <----------- also this, if option 1 is not enough or doesn't work

lazy-apps = true <------ in some case, this might help

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接