Një artikull nga kategoria "shënime në margjinë."
TL:DR:
http2_max_field_size 8k; # do t'ju ndihmojë!Në një nga projektet, pas ndryshimit të disa logjikave të brendshme të backend-it, fillova të vë re një kod të çuditshëm të përgjigjes në log-e, konkretisht — 0. Në log-e duket kështu:
{
"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": ""
}
Leximi i dokumentacionit dhe kërkimi në Google për këtë temë nuk solli asgjë — pasi pohohet se kjo sjellje ndodh kur klienti ka mbyllur lidhjen pa dërguar tituj. Ndërkohë, gjithashtu ekzistojnë disa eksotizma me madhësinë e tamponit për wsgi_, që në rastin tonë nuk ishin të përshtatshme aspak.
Në përgjithësi, vendosëm se problemi nuk është një problem, duke pasur parasysh që në volumet tona, nuk është aspak kritik.
Ajo ndodhi deri në momentin që më shqetësuan me një problem tjetër: në disa raste, lidhjet hapen pa probleme me http, por refuzojnë të funksionojnë me https, duke dhënë atë mrekullinë: Lidhja #0 me hostin example.com mbeti e intact.
curl: (52) Përgjigje e zbrazët nga serveri.
Në log-e, gjeta këtë gjë vetëm përmes IP-së — asnjë kërkesë, asnjë informacion tjetër, siç duket nga shembulli më lart — jo. Vetëm statusi famëkeq 0, por unë e di që kërkesa nuk e kam ndërprerë! Fillova të gërmoj çfarë mund të shkojë keq. Dhe gjithçka doli shumë e thjeshtë:
listen 443 ssl http2 backlog=8192;
Pra, nëse përdorim http2 për lidhjet ssl, nuk mjafton thjesht të konfigurojmë tamponët e kërkesës, duhet t'i konfigurojmë edhe në ngx_http_v2_module, pikërisht:
Sintaksa: http2_max_field_size madhësia;
Parazgjedhja: http2_max_field_size 4k;
Konteksti: http, server
Kufizon madhësinë maksimale të titujve të kërkesës, të kompresuar me HPACK. Kufizimi zbatohet njëlloj si për emrin ashtu edhe për vlerën. Nëse përdoret kodimi Huffman, atëherë madhësia reale e vargjeve të zbërthyer të emrit dhe vlerës mund të jetë më e madhe. Kufizimi i parazgjedhjes është i përshtatshëm për shumicën e kërkesave.
Në përgjithësi, kjo është ajo. Dhe pse? Sepse gjatësia e lidhjes ishte e madhe — më shumë se 4k.
Duke e vendosur atë, për shembull, në 8kb (ose aq sa sigurisht mjafton) — zgjidhim problemin.
Këto janë çështjet.
Burimi: habr.com
