[Nginx] answer_status = 0 мәнін қалай жеңуге болады

«Бөлдіргіштер» санатындағы мақала.

TL: DR:

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

Жобалардың бірінде, сервердің кейбір ішкі логикасын өзгерткеннен кейін, мен журналдарда біртүрлі жауап_кодын байқай бастадым, атап айтқанда 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": ""
}


Құжаттарды оқу және осы тақырып бойынша Google іздеу мүлдем ештеңе әкелмеді - өйткені... Бұл әрекет клиент тақырыптарды өткізбей қосылымды жапқанда орын алады деп көрсетілген. Ал, wsgi_ үшін буфер өлшемі бар әртүрлі экзотикалық заттар, біздің жағдайда «ешқандай жағдайда» деген сөзге сәйкес келмеді.

Жалпы, біз өзіміздің көлемдерімізде оның сын көтермейтінін ескере отырып, мәселе проблема емес деп шештік.

Мені келесі мәселе таң қалдырмайынша: кейбір жағдайларда сілтемелер http арқылы еш қиындықсыз ашылады, бірақ https арқылы жұмыс істеуден мүлдем бас тартады, бұл тамаша: example.com хостына №0 қосылымы өзгеріссіз қалды.
curl: (52) Серверден бос жауап

Журналдарда біз бұл нәрсені тек IP арқылы бақылай алдық - жоғарыдағы мысалдан көрініп тұрғандай, ешқандай сұрау немесе басқа деректер болған жоқ. Тек атышулы статус 0, бірақ мен сұрауды үзбегенімді білемін! Мен ненің қате болуы мүмкін екенін анықтай бастадым. Және бәрі өте қарапайым болып шықты:

443 сл. тыңдау http2 артта қалу=8192;

Егер сіз ssl қосылымдары үшін http2 қолдансаңыз, онда сұрау буферлерін конфигурациялау жеткіліксіз, олар ngx_http_v2_module ішінде конфигурациялануы керек, атап айтқанда:

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

HPACK көмегімен қысылған сұрау тақырыбының ең үлкен өлшемін шектейді. Шектеу атқа да, мәнге де бірдей қолданылады. Егер Хаффман кодтауы пайдаланылса, ашылған атау мен мән жолдарының нақты өлшемі үлкенірек болуы мүмкін. Әдепкі шектеу көптеген сұраулар үшін қолайлы.

Жалпы, бұл солай. Ал неге бәрі? Өйткені сілтеменің ұзындығы ұзақ болды - сол 4к-ден ұзағырақ.

Оны, мысалы, 8кб (немесе жеткілікті болуы мүмкін) етіп орнату арқылы біз мәселені шешеміз.
Мұндай жағдайлар.

Ақпарат көзі: www.habr.com

пікір қалдыру