Назад | Перейти на главную страницу

504 Gateway Time-out uwsgi + nginx django application

Я пытаюсь запустить приложение Django с помощью Nginx + uwsgi, но получаю 504 Gateway Time-out после одной минуты загрузки.

Моему приложению требуется время, чтобы сделать то, что необходимо, поскольку оно выполняет поиск определенных вещей на нескольких веб-сайтах.

Моя конфигурация nginx следующая:

upstream uwsgi {
    server 127.0.0.1:8000;
}

server {

    listen 80;
    server_name server_ip;

    root /opt/emails/subscriptions;
    index index.html index.htm index.php;

    location /emailsproject/ {
        root /opt/emails/subscriptions/;
    }

    location / {
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://uwsgi;
        proxy_set_header Host $http_host;
        uwsgi_read_timeout 18000;
    }
}

Мой сценарий uwsgi:

description "uWSGI server"

env PYTHONPATH=/opt/emails/subscriptions
env DJANGO_SETTINGS_MODULE=emailsproject.settings

start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec uwsgi_python --http-socket  127.0.0.1:8000 -p 4 --wsgi-file /opt/emails/subscriptions/emailsproject/wsgi.py

Мой nginx выдает следующее сообщение об ошибке в error.log:

2015/09/28 02:15:57 [error] 4450#0: *19 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 37.235.53.246, server: my_server_ip, request: "POST /home/ HTTP/1.1", upstream: "http://127.0.0.1:8000/home/", host: "my_server_ip", referrer: "http://my_server_ip/home/"

Кто-нибудь знает, как мне от этого избавиться? Я пробовал тонны решений stackoverflows, но ни один из них не помог мне.

Я знаю, что опаздываю на вечеринку, но, попробовав многие из этих предложений (и других), в конце концов обнаружил, что тайм-аут для меня исходит из моего DNS - если вы используете балансировщики нагрузки Amazon, у них установлен тайм-аут простоя. 120 с по умолчанию.

Многие люди предполагают, что 504 связано с запросом от клиента или с какой-то DDoS-атакой на сайте с огромным скоплением сеансов. 504 работает в обоих направлениях, так как вы можете увидеть ошибку, если ваш wsgi не может представить код и / или если сервер не может ответить из-за переполнения. Поэтому не забудьте запустить manage.py, чтобы дважды проверить презентабельность вашего кода. Тогда попробуй "curl -I yoursite.com" команда, чтобы увидеть, дает ли она вам ошибку. Вам нужно сосредоточить внимание на двух файлах, связанных с nginx, один находится в /etc/nginx/nginx.conf для глобальных настроек по умолчанию. Второй - то, в чем вы создаете себя. /etc/nginx/sites-available. в вашем глобальном /etc/nginx/nginx.conf установка добавить следующие строки

proxy_connect_timeout   10;
proxy_send_timeout      15;
proxy_read_timeout      20;

Это решение устраняет 90% ошибок 504, вызванных различными сценариями. Конфигурация вашего проекта должна быть такой же, как вы упомянули выше.

Это потому, что вам нужно установить proxy_read_timeoutне uwsgi_read_timeout. И это, в свою очередь, связано с тем, что вы фактически не используете uwsgi, вы используете HTTP-проксирование. Бэкэнды Uwsgi объявляются с использованием uwsgi_pass директива.