Статија од категоријата „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