504 Tempo de espera do gateway uwsgi + nginx django application

2

Estou tentando executar meu aplicativo 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, já que ele pesquisa coisas específicas em vários sites.

Meu nginx conf é o próximo:

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 as toneladas de soluções de stackoverflows, mas nenhuma funcionou para mim.

    
por Cajuu' 28.09.2015 / 08:25

3 respostas

2

Muitas pessoas assumem que o 504 está relacionado ao pedido do cliente ou se houver algum ataque DDoS no site com um enorme acúmulo de sessões. O 504 funciona nos dois sentidos, pois você pode ver o erro se o seu wsgi não puder apresentar o código e / ou se o servidor não puder responder devido ao estouro. Portanto, certifique-se de executar o manage.py para checar se seu código está apresentável. Em seguida, tente o comando "curl -I yoursite.com" para ver se está causando erro ainda. Há dois arquivos relacionados ao nginx nos quais você precisa se concentrar: em /etc/nginx/nginx.conf , para as configurações globais padrão. O segundo é o que você cria em /etc/nginx/sites-available . na sua instalação global de /etc/nginx/nginx.conf , adicione as seguintes linhas

proxy_connect_timeout   10;
proxy_send_timeout      15;
proxy_read_timeout      20;

Esta solução resolve 90% do erro 504 causado em diferentes cenários. Seu projeto conf deve ser o mesmo que você mencionou acima.

    
por 06.03.2016 / 22:08
0

Isso porque você precisa definir proxy_read_timeout , não uwsgi_read_timeout . E isso, por sua vez, é porque você não está realmente usando o uwsgi, você está usando HTTP proxying. Os backends Uwsgi são declarados usando a diretiva uwsgi_pass .

    
por 28.09.2015 / 08:40
0

Eu sei que estou atrasado para a festa, mas depois de tentar muitas dessas sugestões (e outras), acabei encontrando o tempo limite para mim que estava ocorrendo no meu DNS - se você estiver usando balanceadores de carga da Amazon, eles têm um "Tempo limite ocioso". "definido no padrão de 120s.

    
por 01.10.2018 / 15:48