[Nginx] Kako poništiti response_status = 0

Članak iz kategorije “sporedne bilješke”.

TL: DR:

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

Na jednom od projekata, nakon promjene neke unutarnje logike pozadine, počeo sam promatrati čudan response_code u zapisnicima, naime 0. U zapisnicima 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 googlanje na ovu temu nije dalo apsolutno ništa - jer... Navedeno je da se ovo ponašanje događa kada klijent zatvori vezu bez prosljeđivanja zaglavlja. Pa, i razne egzotične stvari s veličinom međuspremnika za wsgi_, što u našem slučaju nije odgovaralo riječi "ni na koji način".

Općenito, odlučili smo da problem nije problem, uzimajući u obzir činjenicu da na našim volumenima uopće nije kritičan.

Točno dok me nije zbunio sljedeći problem: u nekim slučajevima veze se otvaraju bez problema putem http-a, ali potpuno odbijaju raditi putem https-a, stvarajući divno: veza #0 za host example.com ostala je netaknuta
curl: (52) Prazan odgovor poslužitelja

U logovima smo ovu stvar mogli pratiti samo po IP-u - nije bilo zahtjeva niti bilo kakvih drugih podataka, što se vidi iz gornjeg primjera. Samo notorni status je 0, ali znam da nisam prekinuo zahtjev! Počeo sam smišljati što bi moglo poći po zlu. I sve se pokazalo vrlo jednostavnim:

slušajte 443 ssl http2 zaostatak=8192;

Pa, ako koristite http2 za ssl veze, tada nije dovoljno samo konfigurirati međuspremnike 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 Huffmanovo kodiranje, stvarna veličina nepakiranih nizova imena i vrijednosti može biti veća. Zadano ograničenje prikladno je za većinu upita.

Općenito, to je to. A zašto sve? Jer duljina linka je bila duga - duža od tih istih 4k.

Postavljanjem na npr. 8kb (ili onoliko koliko je vjerojatno dovoljno) rješavamo problem.
Tako to ide.

Izvor: www.habr.com

Dodajte komentar