[Nginx] Kuidas lüüa vastuse_status = 0

Artikkel kategooriast "kõrvalmärkused".

TL: DR:

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

Ühe projekti puhul hakkasin pärast taustaprogrammi sisemise loogika muutmist jälgima logides kummalist vastuse_koodi, nimelt 0. Logides näeb see välja umbes selline:

{
  "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 sellel teemal guugeldamine ei andnud absoluutselt mitte midagi - sest... Väidetakse, et selline käitumine ilmneb siis, kui klient sulges ühenduse ilma päiseid edastamata. No ja erinevaid eksootilisi asju wsgi_ puhvri suurusega, mis meie puhul ei sobinud sõnaga "mingil moel".

Üldiselt otsustasime, et probleem pole probleem, võttes arvesse asjaolu, et meie mahtude juures pole see sugugi kriitiline.

Täpselt seni, kuni olin hämmingus järgmise probleemi ees: mõnel juhul avanevad lingid probleemideta http kaudu, kuid keelduvad täielikult https kaudu töötamast, mis annab suurepärase: ühendus nr 0 hostiga example.com jäeti puutumata.
curl: (52) Tühi vastus serverist

Logides saime seda asja jälgida ainult IP järgi - päringut ega muid andmeid polnud, nagu ülaltoodud näitest näha. Ainult kurikuulus staatus on 0, kuid ma tean, et ma ei katkestanud taotlust! Hakkasin aru saama, mis võib valesti minna. Ja kõik osutus väga lihtsaks:

kuulake 443 ssl http2 mahajäämus=8192;

Noh, kui kasutate ssl-ühenduste jaoks http2-d, siis ei piisa ainult päringupuhvrite seadistamisest, need tuleb konfigureerida ka ngx_http_v2_module'is, nimelt:

Синтаксис:	http2_max_field_size размер;
Умолчание:	http2_max_field_size 4k;
Контекст:	http, server

Piirab HPACK-i abil tihendatud päringu päise maksimaalset suurust. Piirang kehtib võrdselt nii nimele kui ka väärtusele. Kui kasutatakse Huffmani kodeeringut, võib lahtipakitud nime- ja väärtusstringide tegelik suurus olla suurem. Vaikimisi limiit sobib enamiku päringute jaoks.

Üldiselt on see kõik. Ja miks kõik? Sest lingi pikkus oli pikk – pikem kui need samad 4k.

Seades selle näiteks 8kb (või nii palju, kui tõenäoliselt piisab), lahendame probleemi.
Sellised asjad.

Allikas: www.habr.com

Lisa kommentaar