[Nginx] Hoe om response_status = 0 te verslaan

'n Artikel uit die kategorie "sidenote".

TL: DR:

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

Op een van die projekte, nadat ek die interne logika van die backend verander het, het ek 'n vreemde response_code in die logs begin waarneem, naamlik 0. In die logs lyk dit iets soos volg:

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


Die lees van die dokumentasie en google oor hierdie onderwerp het absoluut niks opgelewer nie - want... Daar word gesΓͺ dat hierdie gedrag plaasvind wanneer die kliΓ«nt die verbinding gesluit het sonder om die kopskrifte deur te gee. Wel, en verskeie eksotiese dinge met die buffergrootte vir wsgi_, wat in ons geval nie op enige manier by die woord gepas het nie.

Oor die algemeen het ons besluit dat die probleem nie 'n probleem is nie, met inagneming van die feit dat dit by ons volumes glad nie krities is nie.

Presies totdat ek verbaas was oor die volgende probleem: in sommige gevalle maak skakels sonder probleme oop via http, maar weier heeltemal om via https te werk, wat die wonderlike produseer: Verbinding #0 na host example.com ongeskonde gelaat
krul: (52) LeΓ« antwoord vanaf bediener

In die logboeke kon ons hierdie ding slegs deur IP opspoor - daar was geen versoek of enige ander data nie, soos uit die voorbeeld hierbo gesien kan word. Net die berugte status is 0, maar ek weet dat ek nie die versoek onderbreek het nie! Ek het begin uitvind wat verkeerd kan gaan. En alles blyk baie eenvoudig te wees:

luister 443 ssl http2 agterstand=8192;

Wel, as jy http2 vir ssl-verbindings gebruik, dan is dit nie genoeg om net die versoekbuffers op te stel nie, hulle moet ook in ngx_http_v2_module gekonfigureer word, naamlik:

Бинтаксис:	http2_max_field_size Ρ€Π°Π·ΠΌΠ΅Ρ€;
Π£ΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΠ΅:	http2_max_field_size 4k;
ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚:	http, server

Beperk die maksimum grootte van 'n versoekopskrif wat met HPACK saamgepers word. Die beperking is ewe veel van toepassing op beide die naam en die waarde. As Huffman-kodering gebruik word, kan die werklike grootte van die uitgepakte naam en waardestringe groter wees. Die versteklimiet is geskik vir die meeste navrae.

Oor die algemeen is dit dit. En hoekom almal? Omdat die lengte van die skakel lank was - langer as daardie selfde 4k.

Deur dit op byvoorbeeld 8kb te stel (of soveel as wat waarskynlik genoeg sal wees), los ons die probleem op.
So gaan dit.

Bron: will.com

Voeg 'n opmerking