Я пытаюсь запустить приложение 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
директива.