我的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分钟,可有人请告诉我,我能做些什么来解决这个?
解决该问题的配置是:
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 /缓存/ 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...