Estou tentando executar minha aplicação Django usando Nginx + uwsgi, mas recebo 504 Gateway Time-out
após um minuto de carregamento.
Meu aplicativo leva tempo para fazer o que é necessário, pois pesquisa coisas específicas em vários sites.
Minha configuração nginx é a próxima:
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;
}
}
Meu script 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
Meu nginx está me dando a seguinte mensagem de erro em 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/"
Alguém tem alguma idéia de como posso me livrar disso? Eu tentei várias soluções de stackoverflows, mas nenhuma funcionou para mim.
Responder1
Eu sei que estou atrasado para a festa, mas depois de tentar muitas dessas sugestões (e outras), finalmente descobri que o tempo limite para mim estava ocorrendo no meu DNS - se você estiver usando balanceadores de carga da Amazon, eles têm um "tempo limite de inatividade" definido em Padrão de 120s.
Responder2
Isso porque você precisa definir proxy_read_timeout
, não uwsgi_read_timeout
. E isso, por sua vez, é porque na verdade você não está usando o uwsgi, mas sim o proxy HTTP. Os backends Uwsgi são declarados usando uwsgi_pass
diretiva.
Responder3
Muitas pessoas presumem que 504 está relacionado à solicitação do cliente ou se houver algum ataque DDoS no local com grande acúmulo de sessões. 504 funciona nos dois sentidos, pois você poderá ver o erro se o seu wsgi não for capaz de apresentar o código e/ou se o servidor não for capaz de responder devido ao estouro. Portanto, certifique-se de executar o manager.py para verificar se o seu código está apresentável. Em seguida, tente "curl -I yoursite.com"
o comando para ver se ainda está apresentando erro. Existem dois arquivos relacionados ao nginx nos quais você precisa se concentrar, um deles está /etc/nginx/nginx.conf
nas configurações globais padrão. O segundo é onde você se cria /etc/nginx/sites-available
. na sua /etc/nginx/nginx.conf
instalação global adicione as seguintes linhas
proxy_connect_timeout 10;
proxy_send_timeout 15;
proxy_read_timeout 20;
Esta solução aborda 90% dos erros 504 causados em diferentes cenários. A configuração do seu projeto deve ser a mesma que você mencionou acima.