我有用于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分钟,有人可以告诉我该如何解决这个问题?
解决问题的配置是:
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
没有提供正确的信息。为了避免其他人觉得有用,我将保留上述内容。
除了“ 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...
查看uwsgi错误日志并了解问题所在对我有帮助。问题根本与Nginx配置无关。