Un artículo de la categoría de "notas marginales".
En uno de los proyectos, después de cambiar la lógica interna del backend, comencé a observar un extraño código de respuesta en los registros, a saber, 0. En los registros se ve algo así:
{ "timestamp": "2020-01-17T08:41:51+00:00", "remote_addr": "zzz.zzz.zzz.zzz", "request_time": 0, "upstream_response_time": "", "upstream_header_time": "", "http_accept_language": "-language", "response_status": 0, "request": "", "host": "example.com", "upstream_addr": "", "http_referrer": "", "request_length": 5854, "bytes_sent": 0, "http_user_agent": "" }
Leer la documentación y buscar en Google sobre este tema no dio absolutamente nada, porque Se argumenta que este comportamiento ocurre cuando el cliente cierra la conexión sin pasar los encabezados. Bueno, diferentes exóticos con el tamaño del búfer para wsgi_, que en nuestro caso no se ajustaba a la palabra "de ninguna manera".
En general, decidieron que el problema no es un problema, dado que en nuestros volúmenes no es absolutamente crítico.
Exactamente hasta que me sorprendió el siguiente problema: en algunos casos, los enlaces se abren sin problemas a través de http, pero se niegan por completo a trabajar a través de https, dando un maravilloso: la conexión # 0 al host example.com se dejó intacta
curl: (52) Respuesta vacía del servidor
Era posible rastrear esta cosa en los registros solo por IP; no hubo solicitud ni ningún otro dato, como se puede ver en el ejemplo anterior. Solo el notorio estado 0, ¡pero sé que no interrumpí la solicitud! Empecé a elegir qué podría salir mal. Y todo resultó ser muy simple:
escuchar 443 ssl http2 backlog = 8192;Bueno, si usa http2 para conexiones SSL, no es suficiente configurar los buffers de solicitud, también debe configurarlos en ngx_http_v2_module, a saber:
: http2_max_field_size ; : http2_max_field_size 4k; : http, server
Limita el tamaño máximo del encabezado de solicitud comprimido con HPACK. La restricción se aplica tanto al nombre como al valor. Si se utiliza la codificación Huffman, el tamaño real de las cadenas desempaquetadas del nombre y el valor puede ser mayor. La restricción predeterminada es adecuada para la mayoría de las consultas.En general, esto es todo. Y por que Porque la longitud del enlace era larga, más de lo mismo 4k.
Poniéndolo, por ejemplo, 8kb (o tanto como sea probablemente suficiente) - resolvemos el problema.
Tales cosas