504 Tempo limite do gateway uwsgi + nginx aplicativo Django

504 Tempo limite do gateway uwsgi + nginx aplicativo Django

Estou tentando executar minha aplicação Django usando Nginx + uwsgi, mas recebo 504 Gateway Time-outapó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_passdiretiva.

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.confnas configurações globais padrão. O segundo é onde você se cria /etc/nginx/sites-available. na sua /etc/nginx/nginx.confinstalaçã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.

informação relacionada