我有用于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 [error] 2709#0:* 1上传超时(110:连接超时),从上游读取响应头,客户端:xx.xx.xx.xx,server:,request :“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...