[Nginx] Como vencer o response_status = 0

Um artigo da categoria de "notas marginais".

TL: DR:
http2_max_field_size 8k; #  ! 


Em um dos projetos, depois de alterar uma lógica interna de back-end, comecei a observar um estranho response_code nos logs, ou seja, 0. Nos logs, é algo parecido com isto:

 { "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": "" } 

Ler a documentação e pesquisar sobre esse tópico não deu absolutamente nada - porque argumenta-se que esse comportamento ocorre quando o cliente fecha a conexão sem passar os cabeçalhos. Bem, diferentes exóticos com o tamanho do buffer para wsgi_, que no nosso caso não se encaixavam na palavra "de jeito nenhum".

Em geral, eles decidiram que o problema não é um problema, já que em nossos volumes não é absolutamente crítico.

Exatamente até que fiquei intrigado com o seguinte problema: em alguns casos, os links abrem sem problemas via http, mas recusam-se completamente a trabalhar via https, dando uma maravilhosa: Conexão # 0 para hospedar example.com deixada intacta
curl: (52) Resposta vazia do servidor

Foi possível rastrear essa coisa nos logs apenas por IP - não havia solicitação ou outros dados, como pode ser visto no exemplo acima. Apenas o status notório 0, mas sei que não interrompi o pedido! Comecei a escolher o que poderia dar errado. E tudo acabou sendo muito simples:

ouça 443 ssl http2 backlog = 8192;

Bem, se você usa http2 para conexões SSL, não basta configurar os buffers de solicitação, você também deve configurá-los em ngx_http_v2_module, a saber:

 : http2_max_field_size ; : http2_max_field_size 4k; : http, server 

Limita o tamanho máximo do cabeçalho da solicitação compactado com HPACK. A restrição se aplica igualmente ao nome e ao valor. Se a codificação Huffman for usada, o tamanho real das seqüências de caracteres descompactadas do nome e valor poderá ser maior. A restrição padrão é adequada para a maioria das consultas.

Em geral, é isso. E porque Porque o comprimento do link era longo - mais do que o mesmo 4k.

Colocando, por exemplo, 8kb (ou o quanto é provavelmente suficiente) - resolvemos o problema.
Essas coisas.

Source: https://habr.com/ru/post/pt484330/


All Articles