У меня есть длинная задача в одном из представлений моего django, для создания ответа на который требуется 120-200 секунд.
Для этого конкретного представления Nginx вызывает 502 Bad Gateway
через 1 минуту с этим сообщением об ошибке вlogs:
[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
Примечание:
- Nginx и uWSGI отлично работают для всех остальных представлений.
- Сервер разработки Django может выполнить задачу без проблем.
- После ошибки Nginx 502 uWSGI продолжает работать в фоновом режиме изавершает работу (в соответствии с заявлением о печати).
- Если я попытаюсь подключиться к uWSGI через браузер, через некоторое время (менее 120 секунд) он скажет
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")