[Nginx] Hvernig á að sigra response_status = 0

Grein úr flokknum „síðanótar“.

TL: DR:

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

Í einu af verkefnunum, eftir að hafa breytt innri rökfræði bakendans, byrjaði ég að fylgjast með undarlegum response_code í loggunum, nefnilega 0. Í loggunum lítur það einhvern veginn svona út:

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


Að lesa skjölin og googla um þetta efni skilaði nákvæmlega engu - því... Tekið er fram að þessi hegðun eigi sér stað þegar viðskiptavinurinn lokaði tengingunni án þess að fara framhjá hausunum. Jæja, og ýmislegt framandi með biðminni fyrir wsgi_, sem í okkar tilfelli passaði ekki orðið „á nokkurn hátt“.

Almennt ákváðum við að vandamálið væri ekki vandamál, að teknu tilliti til þess að í okkar bindum er það alls ekki mikilvægt.

Nákvæmlega þangað til ég var að græða á eftirfarandi vandamáli: í sumum tilfellum opnast tenglar án vandræða í gegnum http, en neita algjörlega að virka í gegnum https, og framleiðir hið frábæra: Tenging #0 við hýsingaraðila example.com ósnortinn
krulla: (52) Tómt svar frá þjóni

Í annálunum gátum við fylgst með þessu aðeins með IP - það var engin beiðni eða önnur gögn, eins og sjá má af dæminu hér að ofan. Aðeins alræmda staðan er 0, en ég veit að ég truflaði ekki beiðnina! Ég fór að finna út hvað gæti farið úrskeiðis. Og allt reyndist mjög einfalt:

hlustaðu 443 ssl http2 backlog=8192;

Jæja, ef þú notar http2 fyrir ssl tengingar, þá er ekki nóg bara að stilla beiðni biðminni, þeir verða líka að vera stilltir í ngx_http_v2_module, nefnilega:

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

Takmarkar hámarksstærð beiðnihaus sem þjappað er með HPACK. Þvingunin á jafnt við um nafnið og gildið. Ef Huffman kóðun er notuð, gæti raunveruleg stærð ópakkaðra nafna og gildisstrengja verið stærri. Sjálfgefin mörk henta fyrir flestar fyrirspurnir.

Almennt séð er þetta það. Og hvers vegna allt? Vegna þess að lengd hlekksins var löng - lengri en þessir sömu 4k.

Með því að stilla það til dæmis á 8kb (eða eins mikið og líklegt er að dugi) leysum við vandamálið.
Svona hlutir.

Heimild: www.habr.com

Bæta við athugasemd