504 Tiempo de espera de puerta de enlace aplicación uwsgi + nginx django

504 Tiempo de espera de puerta de enlace aplicación uwsgi + nginx django

Estoy intentando ejecutar mi aplicación Django usando Nginx + uwsgi, pero la recibo 504 Gateway Time-outdespués de un minuto de carga.

Mi aplicación necesita tiempo para hacer lo necesario, ya que busca cosas específicas en varios sitios web.

Mi configuración de nginx es la siguiente:

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;
    }
}

Mi guión 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

Mi nginx me muestra el siguiente mensaje de error en 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/"

¿Alguien tiene alguna idea sobre cómo puedo deshacerme de esto? Probé toneladas de soluciones de stackoverflows pero ninguna funcionó para mí.

Respuesta1

Sé que llego tarde a la fiesta, pero después de probar muchas de estas sugerencias (y otras), finalmente descubrí que el tiempo de espera se estaba produciendo en mi DNS; si estás usando balanceadores de carga de Amazon, tienen un "Tiempo de espera de inactividad" configurado en 120 por defecto.

Respuesta2

Eso es porque necesitas configurar proxy_read_timeout, no uwsgi_read_timeout. Y eso, a su vez, se debe a que en realidad no estás usando uwsgi, estás usando proxy HTTP. Los backends de Uwsgi se declaran mediante uwsgi_passdirectiva.

Respuesta3

Mucha gente supone que 504 está relacionado con una solicitud del cliente o si hay algún ataque DDoS en el sitio con una gran acumulación de sesiones. 504 funciona en ambos sentidos, ya que puede ver el error si su wsgi no puede presentar el código y/o si el servidor no puede responder debido a un desbordamiento. Así que asegúrese de ejecutar Manage.py para verificar si su código está presentable. Luego prueba "curl -I yoursite.com"el comando para ver si todavía te da error. Hay dos archivos relacionados con nginx en los que debe centrarse, uno de ellos /etc/nginx/nginx.confpara la configuración global predeterminada. El segundo es en qué te creas a ti mismo /etc/nginx/sites-available. en su /etc/nginx/nginx.confinstalación global agregue las siguientes líneas

proxy_connect_timeout   10;
proxy_send_timeout      15;
proxy_read_timeout      20;

Esta solución soluciona el 90 % de los errores 504 causados ​​en diferentes escenarios. La configuración de tu proyecto debe ser la misma que mencionaste anteriormente.

información relacionada