[Nginx] Kuinka kumota vastaus_tila = 0

Artikkeli kategoriasta "sivuhuomautuksia".

TL: DR:

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

Yhdessä projektissa, kun olin muuttanut taustajärjestelmän sisäistä logiikkaa, aloin havaita lokeissa outoa vastauskoodia, nimittäin 0. Lokeissa se näyttää suunnilleen tältä:

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


Asiakirjan lukeminen ja tämän aiheen googlailu ei tuottanut mitään - koska... Sanotaan, että tämä käyttäytyminen tapahtuu, kun asiakas sulki yhteyden välittämättä otsikoita. No, ja erilaisia ​​eksoottisia asioita wsgi_:n puskurin koolla, jotka meidän tapauksessamme eivät sopineet sanaan "millään tavalla".

Yleisesti päätimme, että ongelma ei ole ongelma, kun otetaan huomioon, että meidän volyymeillamme se ei ole ollenkaan kriittinen.

Juuri siihen asti kunnes olin ymmälläni seuraavasta ongelmasta: joissain tapauksissa linkit avautuvat ilman ongelmia http:n kautta, mutta kieltäytyvät toimimasta kokonaan https:n kautta, mikä tuottaa upean: Yhteys #0 isäntänä example.com jätettiin ennalleen.
curl: (52) Tyhjä vastaus palvelimelta

Lokeissa pystyimme seuraamaan tätä asiaa vain IP:n perusteella - ei ollut pyyntöä tai muita tietoja, kuten yllä olevasta esimerkistä näkyy. Vain pahamaineinen tila on 0, mutta tiedän, etten keskeyttänyt pyyntöä! Aloin pohtia, mikä voisi mennä pieleen. Ja kaikki osoittautui hyvin yksinkertaiseksi:

kuuntele 443 ssl http2 ruuhka=8192;

No, jos käytät http2:ta ssl-yhteyksiin, ei riitä, että määrität vain pyyntöpuskurit, vaan ne on myös määritettävä ngx_http_v2_modulessa, nimittäin:

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

Rajoittaa HPACKilla pakatun pyynnön otsikon enimmäiskokoa. Rajoitus koskee yhtäläisesti sekä nimeä että arvoa. Jos käytetään Huffman-koodausta, pakkaamattomien nimi- ja arvomerkkijonojen todellinen koko voi olla suurempi. Oletusraja sopii useimpiin kyselyihin.

Yleisesti ottaen se on tämä. Ja miksi kaikki? Koska linkin pituus oli pitkä - pidempi kuin samat 4k.

Asettamalla sen esimerkiksi 8kb (tai niin paljon kuin todennäköisesti riittää), ratkaisemme ongelman.
Tällaisia ​​asioita.

Lähde: will.com

Lisää kommentti