Ошибка: восходящее преждевременное закрытие соединения при чтении заголовка ответа от восходящего потока [uWSGI/Django/NGINX]
В настоящее время я ВСЕГДА получаю 502 запроса, который мои пользователи делают... который обычно возвращает 872 строки и занимает 2,07 для запуска в MySQL. Однако он возвращает много информации. (Каждая строка содержит много материала). Любые идеи?
Запуск Django (API-интерфейс Tastypie Rest), стек Nginx и uWSGI.
Конфигурация сервера с NGINX
# the upstream component nginx needs to connect to
upstream django {
server unix:///srv/www/poka/app/poka/nginx/poka.sock; # for a file socket
}
# configuration of the server
server {
# the port your site will be served on
listen 443;
# the domain name it will serve for
server_name xxxx; # substitute your machine IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 750M; # adjust to taste
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /srv/www/poka/app/poka/nginx/uwsgi_params; # the uwsgi_params file you installed
}
}
Конфигурация UWSGI
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 2
# the socket (use the full path to be safe
socket = /srv/www/poka/app/poka/nginx/poka.sock
# ... with appropriate permissions - may be needed
chmod-socket = 666
# clear environment on exit
vacuum = true
pidfile = /tmp/project-master.pid # create a pidfile
harakiri = 120 # respawn processes taking more than 20 seconds
max-requests = 5000 # respawn processes after serving 5000 requests
daemonize = /var/log/uwsgi/poka.log # background the process & log
log-maxsize = 10000000
#http://uwsgi-docs.readthedocs.org/en/latest/Options.html#post-buffering
post-buffering=1
logto = /var/log/uwsgi/poka.log # background the process & log
Ответы
Ответ 1
Это вряд ли будет проблемой конфигурации nginx.
Это почти наверняка, что бэкэнд на самом деле рушится (или просто прекращает соединение), а не дает отвратительный ответ. то есть сообщение об ошибке сообщает вам, в чем проблема, но вы ищете не то место для его решения.
Вы не даете достаточно информации, чтобы позволить использовать, чтобы выяснить, что такое точная проблема, но если бы я должен был предположить:
который обычно возвращает 872 строки и занимает 2,07 для работы в MySQL. Однако он возвращает много информации.
Это либо время от времени, либо заканчивается из памяти.
Ответ 2
У меня была та же проблема, что исправлено для меня - это добавить мой домен в
settings.py например:
ALLOWED_HOSTS = ['.mydomain.com', '127.0.0.1', 'localhost']
По той же проблеме, я имею в виду, что я даже не мог загрузить страницу, nginx вернул бы 502 без обслуживания каких-либо страниц, на которых я мог бы вызвать сбой приложения.
И журнал nginx содержал:
Error: upstream prematurely closed connection while reading response header from upstream
Ответ 3
В вашем блоке местоположения @django вы можете попробовать добавить некоторые прокси файлы для чтения и подключения. например.
location @django {
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
# proxy header definitions
...
proxy_pass http://django;
}
Ответ 4
Иногда это может быть проблема с авторитетом. Проверьте права доступа к каталогу проекта.
Ответ 5
Это может быть проблема конфигурации UWSGI вместо Nginx. Я видел, что у вас были процессы uwsgi = 2 и harakiri = 120, пытались ли вы изменить эти и другие поля там одно за другим?
У меня была та же проблема, но это была не моя конфигурация NGINX, это были мои процессы UWSGI, вызывающие ошибки тайм-аута, когда я отправлял JSON с клиентской стороны на сервер. У меня были процессы как 5, я изменил его на 1, и это решило проблему. Для моего приложения мне нужно было только запустить 1 процесс за раз.
Вот рабочий INI файл конфигурации UWSGI, который решил проблему тайм-аута и, таким образом, проблему с шлюзом 502 (восходящий поток закрыт преждевременно).
autoboot.ini
#!/bin/bash
[uwsgi]
socket = /tmp/app.sock
master = true
chmod-socket = 660
module = app.wsgi
chdir = home/app
close-on-exec = true # Allow linux shell via uWSGI
processes = 1
threads = 2
vacuum = true
die-on-term = true
Надеюсь, поможет.