Članak iz kategorije “sporednih napomena”.
TL: DR:
http2_max_field_size 8k; # всех спасет!Na jednom od projekata, nakon promjene neke interne logike pozadine, počeo sam primjećivati čudan response_code u logovima, naime 0. U logovima to izgleda otprilike ovako:
{
"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": ""
}
Čitanje dokumentacije i guglanje na ovu temu nije dalo apsolutno ništa - jer... Navodi se da se ovo ponašanje događa kada klijent zatvori vezu bez prosljeđivanja zaglavlja. Pa, i razne egzotične stvari s veličinom bafera za wsgi_, koje se u našem slučaju ne uklapaju u riječ „ni na koji način“.
Generalno, odlučili smo da problem nije problem, uzimajući u obzir činjenicu da u našim količinama nije nimalo kritičan.
Tačno dok me nije zbunio sljedeći problem: u nekim slučajevima, veze se otvaraju bez problema preko http, ali potpuno odbijaju raditi preko https, stvarajući divno: Veza #0 sa hostom example.com ostala je netaknuta
curl: (52) Prazan odgovor sa servera
U logovima smo ovu stvar mogli pratiti samo po IP-u - nije bilo zahtjeva niti bilo kakvih drugih podataka, kao što se vidi iz gornjeg primjera. Samo je ozloglašeni status 0, ali znam da nisam prekinuo zahtjev! Počeo sam da shvaćam šta bi moglo poći po zlu. I sve se pokazalo vrlo jednostavno:
slušaj 443 ssl http2 zaostatak=8192;
Pa, ako koristite http2 za ssl veze, onda nije dovoljno samo konfigurirati bafere zahtjeva, oni također moraju biti konfigurirani u ngx_http_v2_module, naime:
Синтаксис: http2_max_field_size размер;
Умолчание: http2_max_field_size 4k;
Контекст: http, server
Ograničava maksimalnu veličinu zaglavlja zahtjeva komprimiranog pomoću HPACK-a. Ograničenje se jednako primjenjuje i na ime i na vrijednost. Ako se koristi Huffman kodiranje, stvarna veličina raspakovanih nizova imena i vrijednosti može biti veća. Zadana granica je pogodna za većinu upita.
Generalno, to je to. A zašto sve? Zato što je dužina veze bila duga - duža od tih istih 4k.
Postavljanjem na, na primjer, 8kb (ili onoliko koliko je vjerovatno dovoljno), rješavamo problem.
Tako to ide.
izvor: www.habr.com
