Подтвердить что ты не робот

Ошибка: восходящее преждевременное закрытие соединения при чтении заголовка ответа от восходящего потока [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
4b9b3361

Ответ 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

Надеюсь, поможет.