Actualmente estoy recibiendo una inundación HTTP bastante grande en este momento, y está causando que mi proxy inverso nginx produzca una 502 Bad Gateway.
Tengo un servidor frontend que ejecuta nginx como proxy para mi servidor back-end, pero solo está recibiendo un montón de connect() failed (110: Connection timed out) while connecting to upstream
errores. Toneladas de ellos. Si omito el servidor proxy para conectarme al backend, puedo ejecutar el sitio muy bien, así que sé que está en el proxy inverso en alguna parte. Sin embargo, no tengo idea de cómo determinar por qué se está agotando el tiempo de espera.
¿Alguna ayuda?
ejecutando nginx 1.2.3 en CentOS 6.2
nginx
reverse-proxy
Robar
fuente
fuente
Respuestas:
Supongo que ya ha aumentado su nivel de registro de errores de Nginx para depurar. Si no, comience allí.
Probablemente su mejor opción sea usar
strace
para ver las llamadas al sistema que realiza Nginx. En particular, querrá prestar atención a lasconnect()
llamadas y vigilar los códigos de retorno de estos (man 2 connect
puede ser su amigo aquí).Una vez que tenga esa información, puede adivinar mejor si el problema se limita a su proxy de interfaz o si tiene algo que ver con las interacciones entre el proxy y el servidor de aplicaciones de fondo.
fuente
No se vuelve mucho más pedante que esto a menos que desee poner sondas dtrace:
Establezca el nivel de registro de depuración: /etc/nginx/nginx.conf:
Configure tcpdump en otra ventana:
Monitoree los archivos de registro en otra ventana:
Inicio nginx interactivamente con strace:
Y entonces
Se puede obtener una mayor depuración con un nginx compilado con
--with-debug
. Compruébelo ejecutando:Otro buen módulo no compilado por defecto es: HttpStubStatusModule . Con toda probabilidad, cualquier configuración decente requerirá un nginx compilado a medida (paquete altamente recomendado usando las herramientas de empaquetado de distro).
La mayoría de estos no son aptos para el uso en producción, mira compilar nginx con gperf si necesitas más estadísticas.
fuente
Parece que estás depurando un sitio de alto tráfico.
Úselo
debug
con ladebug_connection
directiva para que el registro de errores de nginx muestre los registros de depuración solo de su IP.Una vez que comience a ver algunos registros de errores útiles en lugar de activar la opción de depuración para toda la configuración nginx, agregue una
error_log /path/to/some/file/ debug;
directiva separada en ellocation {..}
bloque responsable de la conexión reverse_proxy.De esta manera, podrá aislar el registro de errores de depuración solo de su IP.
Intente relacionarlo con la solicitud que está haciendo (desde su navegador).
Por ejemplo, consulte: https://easyengine.io/tutorials/nginx/debugging/
Un nivel por delante, puede usar HttpEchoModule de Nginx
fuente
Nunca he encontrado que Nginx sea un cuello de botella, en la mayoría de los casos es más que capaz que los back-end. Pero si probó sin Nginx y no encontró ningún error, entonces será cualquiera (o ambos):
Sin ver sus configuraciones de Nginx, nadie puede comentar sobre la primera. Y sin resultados adecuados del sistema operativo, nadie puede comentar sobre este último.
fuente