[Nginx] Hoe response_status = 0 te ferslaan

In artikel út 'e kategory "sidenoten".

TL: DR:

http2_max_field_size 8k; # всех спасет!

Op ien fan 'e projekten, nei it feroarjen fan wat ynterne logika fan' e backend, begon ik in frjemde response_code te observearjen yn 'e logs, nammentlik 0. Yn' e logs sjocht it der sa út:

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


It lêzen fan de dokumintaasje en googelen oer dit ûnderwerp levere hielendal neat op - want... It wurdt oanjûn dat dit gedrach foarkomt as de kliïnt de ferbining slute sûnder de kopteksten troch te jaan. No, en ferskate eksoatyske dingen mei de buffergrutte foar wsgi_, dy't yn ús gefal net paste by it wurd "op ien of oare manier".

Yn 't algemien hawwe wy besletten dat it probleem gjin probleem is, rekken hâldend mei it feit dat it by ús voluminten hielendal net kritysk is.

Krekt oant ik waard fernuvere troch it folgjende probleem: yn guon gefallen, keppelings iepen sûnder problemen fia http, mar folslein wegerje te wurkjen fia https, produsearje de prachtige: Ferbining # 0 nei host example.com bleau yntakt
curl: (52) Lege antwurd fan tsjinner

Yn 'e logs koenen wy dit ding allinich folgje troch IP - d'r wie gjin fersyk of oare gegevens, lykas kin wurde sjoen út it foarbyld hjirboppe. Allinnich de beruchte status is 0, mar ik wit dat ik it fersyk net ûnderbrekke! Ik begon út te finen wat der mis gean koe. En alles die bliken hiel ienfâldich te wêzen:

harkje 443 ssl http2 efterstân=8192;

No, as jo http2 brûke foar ssl-ferbiningen, dan is it net genôch om allinich de oanfraachbuffers te konfigurearjen, se moatte ek konfigureare wurde yn ngx_http_v2_module, nammentlik:

Синтаксис:	http2_max_field_size размер;
Умолчание:	http2_max_field_size 4k;
Контекст:	http, server

Beheint de maksimale grutte fan in fersykkop komprimearre mei HPACK. De beheining jildt likegoed foar sawol de namme as de wearde. As Huffman-kodearring wurdt brûkt, kin de werklike grutte fan 'e útpakte namme- en weardestrings grutter wêze. De standertlimyt is geskikt foar de measte fragen.

Yn it algemien, dit is it. En wêrom allegear? Om't de lingte fan 'e keppeling lang wie - langer dan deselde 4k.

Troch it yn te stellen op bygelyks 8kb (of safolle as wierskynlik genôch is), losse wy it probleem op.
Sa giet it.

Boarne: www.habr.com

Add a comment