在我的django视图之一中,我的任务很长,需要120-200秒才能生成响应。
对于此特定视图,Nginx在记录后的错误消息出现1分钟后引发502 Bad Gateway
:
[error] 7719#7719: *33 upstream prematurely closed connection while reading response header from upstream,
这是我的Nginx配置:
upstream DjangoServer {
server 127.0.0.1:8000;
keepalive 300;
}
location / {
include proxy_params;
proxy_pass http://DjangoServer;
allow all;
proxy_http_version 1.1;
proxy_set_header X-Cluster-Client-Ip $remote_addr;
client_max_body_size 20M;
keepalive_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
}
这是我的uWSGI配置:
uid=www-data
gid=www-data
http=127.0.0.1:8000
http-keepalive=300
master=1
vacuum=1
workers=2
threads=5
log-5xx=1
注意:
ERR_EMPTY_RESPONSE
。您可以承担这样的任务
def long_task_view(request):
start_time = time.time()
print(start_time)
# doing stuff
time.sleep(130)
print(time.time() - start_time)
return HttpResponse("The result")
答案 0 :(得分:0)
您可以尝试增加Nginx的超时时间:
vim /etc/nginx/nginx.conf
将此添加到http:
http {
...
fastcgi_read_timeout 300;
...
}
但是最佳实践是创建一个异步过程来处理所采用的方法。我通常会芹菜做异步任务。