[Nginx] Како да се победи реакцијата_статус = 0

Статија од категоријата „sidenotes“.

TL: ДР:

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

На еден од проектите, откако сменив некоја внатрешна логика на заднината, почнав да набљудувам чуден answer_code во дневниците, имено 0. Во дневниците изгледа вака:

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


Читањето на документацијата и гуглањето на оваа тема не дадоа апсолутно ништо - бидејќи ... Се наведува дека ова однесување се случува кога клиентот ја затворил врската без да ги помине заглавјата. Па, и разни егзотични работи со големина на тампон за wsgi_, што во нашиот случај не одговараше на зборот „на кој било начин“.

Генерално, решивме дека проблемот не е проблем, земајќи го предвид фактот дека кај нашите томови тој воопшто не е критичен.

Точно додека не бев збунет од следниот проблем: во некои случаи, врските се отвораат без проблеми преку http, но целосно одбиваат да работат преку https, создавајќи го прекрасното: Врската број 0 со домаќинот example.com остана недопрена
curl: (52) Празен одговор од серверот

Во дневниците, можевме да ја следиме оваа работа само преку IP - немаше барање или други податоци, како што може да се види од примерот погоре. Само ноторниот статус е 0, но знам дека не го прекинав барањето! Почнав да сфаќам што може да тргне наопаку. И сè се покажа како многу едноставно:

слушај 443 ддв http2 заостанати=8192;

Па, ако користите http2 за ssl врски, тогаш не е доволно само да ги конфигурирате баферите за барања, тие исто така мора да бидат конфигурирани во ngx_http_v2_module, имено:

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

Ја ограничува максималната големина на заглавието на барањето компресирана со помош на HPACK. Ограничувањето се применува подеднакво и за името и за вредноста. Ако се користи кодирање Хафман, вистинската големина на отпакуваните низи со имиња и вредности може да бидат поголеми. Стандардното ограничување е погодно за повеќето прашања.

Во принцип, ова е тоа. И зошто сите? Бидејќи должината на врската беше долга - подолга од истите тие 4k.

Со поставување на, на пример, 8 kb (или онолку колку што веројатно ќе биде доволно), го решаваме проблемот.
Така оди.

Извор: www.habr.com

Додадете коментар