
Obtengo un tiempo de espera 504 en mi servidor Nginx:
504 Gateway Time-out
. El sitio web permite a los usuarios descargar archivos de datos personalizados. El sitio funciona bien en la mayoría de las condiciones y los usuarios pueden descargar algunos archivos sin problemas. El problema es que los archivos de datos sólo se generan cuando se solicitan. Entonces, cuando se solicitan datos complejos, el backend de Python tarda más de un minuto en generar el archivo e iniciar la descarga. Debido a que no hay respuesta en un minuto, Nginx devuelve un archivo 504 Gateway Time-out
. Los archivos en sí son archivos CSV y no son muy grandes, por lo que las descargas son rápidas una vez que el backend ha generado el archivo, pero necesito una manera de hacer que Nginx espere más.
Estoy buscando una manera de aumentar el tiempo de espera de Nginx de 1 minuto a aproximadamente 10 minutos.
Hasta ahora lo he probado:
cambiando el nginx.conf
archivo para incluir las siguientes líneas entre http {}
llaves
uwsgi_connect_timeout 75s;
proxy_connect_timeout 600;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
También intenté agregar un timeout.conf
archivo /etc/nginx/conf.d/
como lo sugierehttps://asdqwe.net/blog/solutions-504-gateway-timeout-nginx/:
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
Después de realizar cada cambio, reinicié el servidor pero el tiempo de espera aún ocurre después de 1 minuto. Esto se ha probado aún más ejecutando un curl -o
en el servidor para evitar cualquier problema con el proveedor de servicios. El resultado fue el siguiente.
$curl -o out-put-file.csv "./localhost/my/url"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 183 100 183 0 0 3 0 0:01:01 0:01:00 0:00:01 48
Y este error se escribe en error.log
2018/03/26 09:55:15 [error] 10105#10105: *1 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 142.1.2.3, server: localhost, request: "GET /my/url", upstream: "uwsgi://unix:/tmp/my-applacation.sock", host: "142.1.2.3"
Cuando ejecuto mi aplicación sin Nginx y ejecuto la misma, curl -o
la solicitud tarda bastante (hasta 8 minutos dependiendo de los datos solicitados) pero finaliza correctamente sin errores ni tiempo de espera.
La ejecución $ /usr/sbin/nginx -V 2>&1 | grep conf
muestra que el archivo de configuración se encuentra en--conf-path=/etc/nginx/nginx.conf
Versión de Nginx: nginx/1.12.2 y nginx/1.4.6 (Ubuntu)
Versión del sistema operativo: Ubuntu 16.04.1 y Ubuntu 14.04.5 LTS
Editar:
He probado cambiar la cantidad de procesos_trabajadores en el archivo de configuración solo para asegurarme de que los cambios en otras cosas en el archivo de configuración se recogieran y, efectivamente, cambiar ese número cambia la cantidad de trabajadores para que el archivo sea el archivo correcto y cambie a ser recogido por Nginx. Simplemente no hay cambios en los tiempos de espera (¿o tal vez en la sección http completa?). También probé establecer los tiempos de espera en 30 segundos, pero aún así son de 1 minuto. Además, intenté poner estas configuraciones sites-enabled/my_site
pero sigo teniendo los mismos resultados.
Editar2:
Por lo que puedo decir, estoy configurando los valores correctamente de acuerdo con la documentación de Nginx. uwsgi_connect_timeout
Respuesta1
¡¡Lo solucioné!!
El problema resultó estar relacionado con uwsgi, mientras había configurado
uwsgi_connect_timeout 75s;
lo que realmente necesitaba configurar era
uwsgi_read_timeout 600s;