[Nginx] Kā uzvarēt response_status = 0

Raksts, kas attiecas uz «piezīmēm malās».

TL:DR:

http2_max_field_size 8k; # visi tiek glābti!

Vienā no projektiem, pēc dažādu iekšējo loģiku maiņas backendā, sāku novērot dīvainu response_code žurnālos, proti — 0. Žurnālos tas izskatās aptuveni 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": ""
}


Dokumentācijas lasīšana un meklēšana šajā jautājumā nepalīdzēja — jo tiek apgalvots, ka šāds uzvedības modelis rodas, kad klients aizver savienojumu, nenododot virsrakstus. Un visādas eksotiskas lietas ar wsgi_ bufera izmēru, kas mūsu gadījumā nemaz nebija piemērotas.

Kopumā nolēmām, ka problēma nav problēma, ņemot vērā, ka mūsu apjomos tas nav kritiski.

Tieši līdz tam brīdim, kamēr mani nenodarbina nākamā problēma: dažos gadījumos saites bez grūtībām atveras pa http, bet pilnīgi atsakās darboties pa https, izsniegšana lieliska: Connection #0 to host example.com left intact
curl: (52) Tukša atbilde no servera

Žurnālos šo lietu izdevās izsekot tikai pa IP — ne pieprasījuma, ne citu datu, kā redzams augstāk minētajā piemērā, nav. Tikai vispārzināmā statuss 0, bet es taču zinu, ka pieprasījumu es nenoslēdzu! Sāku pētīt, kas varētu iet ne tā. Un viss izrādījās ļoti vienkārši:

listen 443 ssl http2 backlog=8192;

Nu tā — ja tiek izmantots http2 ssl savienojumiem, tad nepietiek tikai konfigurēt pieprasījuma buferus, tos jākonfigurē arī ngx_http_v2_module, proti:

Sintakse:	http2_max_field_size lielums;
Noklusējums:	http2_max_field_size 4k;
Konteksts:	http, server

Ierobežo maksimālo pieprasījuma virsraksta izmēru, kas saspiests ar HPACK. Ierobežojums attiecas vienādi gan uz nosaukumu, gan uz vērtību. Ja tiek izmantota Huffmana kodēšana, faktiskais atpakotā nosaukuma un vērtības izmērs var būt lielāks. Noklusējuma ierobežojums der lielākajai daļai pieprasījumu.

Vispār, tā ir tā. Un kāpēc? Jo saites garums bija liels — lielāks par tiem pašiem 4k.

Iestatot to, piemēram, uz 8kb (jeb tik daudz, cik noteikti pietiks) — atrisinām problēmu.
Tādas ir lietas.

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster