uWSGI需要很长时间来处理请求时,Nginx超时

问题描述 投票:37回答:3

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

我的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;
}

但是对于uWSGI上的长时间运行的请求,大约需要1分钟才能完成,我在Nginx错误日志中收到超时错误,如下所示:

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

我已经将标头超时和uWSGI发送/读取超时设置为5分钟,有人可以告诉我该如何解决这个问题?

nginx configuration uwsgi connection-timeout
3个回答
66
投票

解决问题的配置是:

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没有提供正确的信息。为了避免其他人觉得有用,我将保留上述内容。


0
投票

除了“ 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 / cache / 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 -R $THEUSER:$THEGROUP /var/cache/nginx/uwsgi_temp/
# not sure if you have to restart nginx here... 


0
投票

查看uwsgi错误日志并了解问题所在对我有帮助。问题根本与Nginx配置无关。

© www.soinside.com 2019 - 2024. All rights reserved.