46

我有用于 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 分钟,有人可以告诉我我能做些什么来克服这个问题吗?

4

4 回答 4

80

解决问题的配置是:

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没有提供正确的信息。我将保留以上内容,以防其他人发现它有用。

于 2013-04-22T09:09:06.987 回答
4

通过更改以下 Nginx 配置解决

proxy_connect_timeout 300;
proxy_read_timeout    300;


client_body_timeout   300;
client_header_timeout 300;
keepalive_timeout     300;

和 UWSGI 设置

http-timeout = 300 // or 'socket-timeout = 300' depending on uwsgi setting
于 2020-09-01T09:46:43.717 回答
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 方法

chown -R $THEUSER:$THEGROUP /var/cache/nginx/uwsgi_temp/
# not sure if you have to restart nginx here... 
于 2015-02-16T17:49:53.463 回答
0

查看 uwsgi 错误日志并了解问题对我有什么帮助。问题根本与 Nginx 配置无关。我的电子邮件主机已更改,代码在调用发送电子邮件代码时出现错误

于 2019-12-31T15:09:24.620 回答