[Nginx] Kuidas vÔita response_status = 0

Artikkel, mille vĂ”iks klassifitseerida kui „mĂ€rkmed lehtede serval“.

TL:DR:

http2_max_field_size 8k; # kÔik pÀÀstab!

Üks meie projektidest, pĂ€rast teatud sisemise logika muutmist backend'is, hakkas nĂ€itama kummalist response_code'i logides, nimelt — 0. Logides nĂ€eb see vĂ€lja umbes nii:

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


Dokumentatsiooni lugemine ja selle teema guugeldamine ei andnud absoluutselt midagi — kuna vĂ€idetakse, et selline kĂ€itumine tekib, kui klient sulgeb ĂŒhenduse, edastamata pĂ€iseid. No ja erinev eksootika wsgi_ pufferi suurusega, mis meie puhul ei sobinud ĂŒldse.

KokkuvĂ”ttes otsustasime, et probleem — ei ole probleem, arvestades, et meie mahu korral ei ole see sugugi kriitiline.

TÀpselt kuni hetkeni, mil mind hÀiris jÀrgmine probleem: mÔnel juhul avanevad lingid probleemideta http kaudu, kuid keeldusid tÀielikult töötamast https kaudu, andes imelise: Connection #0 to host example.com left intact
curl: (52) TĂŒhi vastus serverilt

Logidest on seda asja jĂ€lgida saanud ainult IP kaudu — ei ole nĂ€htavust ei pĂ€ringutest ega teistest andmetest, nagu nĂ€ide ĂŒlal nĂ€itab. Ainult see kurikuulus staatus 0, aga ma ju tean, et ma pĂ€ringut ei katkestanud! Hakkasin uurima, mis vĂ”ib valesti minna. Ja kĂ”ik osutus vĂ€ga lihtsaks:

listen 443 ssl http2 backlog=8192;

Nii et kui kasutada http2 ssl-ĂŒhenduste jaoks, ei piisa lihtsalt pĂ€ringupuhvrite konfigureerimisest, neid tuleb konfigureerida ka ngx_http_v2_module'is, nimelt:

SĂŒntaks:	http2_max_field_size suurus;
Vaikimisi:	http2_max_field_size 4k;
Kontekst:	http, server

Piirab maksimaalset pÀringu pÀise suurust, mis on kokku surutud HPACK-i abil. Piirang kehtib vÔrdselt nii nime kui ka vÀÀrtuse kohta. Kui kasutatakse Huffmani kodeerimist, vÔib nimede ja vÀÀrtuste dekomprimeeritud stringide tegelik suurus olla suurem. Vaikimisi piirang sobib enamikule pÀringutele.

KokkuvĂ”tteks, see ongi pĂ”hjus. Ja kĂ”ik sellepĂ€rast, et lingi pikkus oli suur — rohkem kui need 4k.

Seades selle nĂ€iteks 8 kb (vĂ”i nii palju, kui tĂ”enĂ€oliselt piisab) — lahendame probleemi.
Sellised lood.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster