Nginx的超时时uWSGI需要长时间处理请求(Nginx timeouts when uWSGI

2019-08-31 17:36发布

我的Nginx + uWSGI Python的Django应用程序。

我在下面nginx.conf

location / {
    include uwsgi_params;
    uwsgi_pass   127.0.0.1:9001;
    uwsgi_read_timeout 1800;
    uwsgi_send_timeout 300;
    client_header_timeout 300;
    proxy_read_timeout 300;
    index  index.html index.htm;
}

但需时约1分钟uWSGI长时间运行的请求完成我得到了如下的Nginx错误日志超时错误:

2013年4月22日12时35分56秒[错误] 2709#0:* 1上游超时(110:连接超时),同时读取来自上游,客户端响应标头:XX.XX.XX.XX,服务器:,请求: “GET /实体/ datasenders / HTTP / 1.1”,上游: “uwsgi://127.0.0.1:9001”,主机: “xxx.xx.xx.x”

我已经设置了头超时和uWSGI发/读超时5分钟,可有人请告诉我,我能做些什么来解决这个?

Answer 1:

解决该问题的配置是:

location / {
    include uwsgi_params;
    uwsgi_pass   127.0.0.1:9001;
    uwsgi_read_timeout 300;
    index  index.html index.htm;
}

之所以在这个问题上面的配置并没有为我们工作,因为不幸的是在我们的机器多条路径有nginx.conf文件。 我们与在错误的道路通过conf进行工作。

要正确地找出你的nginx从运行拿起配置哪条路径:

nginx -V  # V is caps

这将有--conf-path=[]它会告诉你到底从那里染上配置。

我最近发现上面nginx -V不给予正确的信息。 我会离开上面,以防万一别人发现它有用。



Answer 2:

除了“uwsgi_read_timeout”的答案,你也应该检查所有权是你的nginx uwsgi缓存目录正确。 所有权必须设置为相同的用户运行Nginx的过程......对我来说,我不得不这样做

grep '^user' /etc/nginx/nginx.conf
ls -lah /var/cache/nginx/uwsgi_temp
for f in $( find /var/cache/nginx/uwsgi_temp ); do ls -lah $f; done

难道这些文件由同一用户拥有? 如果没有,你可以关闭的nginx并删除所有的缓存文件,确保正确的所有者是在/ var /缓存/ nginx的/ uwsgi_temp并重新启动。 也许你也可以只是做一个递归CHOWN,我没有测试这种方法。

# store the user
THEUSER=$(grep '^user' /etc/nginx/nginx.conf | sed 's/.* //; s/;.*//' )

删除缓存和重新启动的方法

/etc/init.d/nginx stop
rm -rf /var/cache/nginx/uwsgi_temp/* 
chown $THEUSER:$THEUSER /var/cache/nginx/uwsgi_temp
/etc/init.d/nginx start

递归CHOWN方法

chown -R $THEUSER:$THEGROUP /var/cache/nginx/uwsgi_temp/
# not sure if you have to restart nginx here... 


文章来源: Nginx timeouts when uWSGI takes long to process request