Tiempos de espera de Nginx cuando uWSGI demora en procesar la solicitud
configuration connection-timeout (2)
Tengo Nginx + uWSGI para la aplicación Python Django.
Tengo lo siguiente en mi nginx.conf
:
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9001;
uwsgi_read_timeout 1800;
uwsgi_send_timeout 300;
client_header_timeout 300;
proxy_read_timeout 300;
index index.html index.htm;
}
pero para las solicitudes de larga ejecución en uWSGI que tarda aproximadamente 1 minuto en completarse, obtengo un error de tiempo de espera en el registro de errores de Nginx, como se muestra a continuación:
2013/04/22 12:35:56 [error] 2709 # 0: * 1 tiempo de espera de subida (110: tiempo de espera de conexión agotado) mientras se lee el encabezado de respuesta de la parte superior, cliente: xx.xx.xx.xx, servidor: solicitud : "GET / entity / datasenders / HTTP / 1.1", upstream: "uwsgi: //127.0.0.1: 9001", host: "xxx.xx.xx.x"
Ya he configurado el tiempo de espera del encabezado y el uWSGI envía / lee tiempos de espera excedidos a 5 minutos. ¿Puede alguien decirme qué puedo hacer para superar esto?
Además de la respuesta "uwsgi_read_timeout", también debe verificar que la propiedad sea correcta para su directorio de caché nginx uwsgi. La propiedad debe establecerse en el mismo usuario que el proceso nginx en ejecución ... En mi caso, tuve que hacer esto
grep ''^user'' /etc/nginx/nginx.conf
ls -lah /var/cache/nginx/uwsgi_temp
for f in $( find /var/cache/nginx/uwsgi_temp ); do ls -lah $f; done
¿Son estos archivos propiedad del mismo usuario? De lo contrario, puede cerrar nginx y eliminar todos los archivos de caché, asegúrese de que el propietario adecuado esté en / var / cache / nginx / uwsgi_temp y reinicie. Tal vez también podrías hacer un chown recursivo, no probé este enfoque.
# store the user
THEUSER=$(grep ''^user'' /etc/nginx/nginx.conf | sed ''s/.* //; s/;.*//'' )
Eliminar el caché y reiniciar el enfoque
/etc/init.d/nginx stop
rm -rf /var/cache/nginx/uwsgi_temp/*
chown $THEUSER:$THEUSER /var/cache/nginx/uwsgi_temp
/etc/init.d/nginx start
Enfoque de chown recursivo
chown -R $THEUSER:$THEGROUP /var/cache/nginx/uwsgi_temp/
# not sure if you have to restart nginx here...
La configuración que resuelve el problema es:
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9001;
uwsgi_read_timeout 300;
index index.html index.htm;
}
La razón por la cual la configuración anterior en la pregunta no funcionó para nosotros porque lamentablemente en nuestra máquina, varias rutas tenían el archivo nginx.conf
. Estábamos trabajando con la conf en el camino equivocado.
Para averiguar correctamente qué ruta de su nginx está recogiendo la configuración de ejecutar:
nginx -V # V is caps
esto tendrá un --conf-path=[]
que le dirá exactamente desde dónde está recogiendo la configuración.
Recientemente encontré el nginx -V
anterior para no dar la información correcta. Dejaré lo anterior solo en caso de que otros lo encuentren útil.