[Нгинк] Како победити респонсе_статус = 0

Чланак из категорије „споредне белешке“.

ТЛ: ДР:

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


Читање документације и гуглање на ову тему није дало апсолутно ништа - јер... Наводи се да се ово понашање дешава када је клијент затворио везу без прослеђивања заглавља. Па, и разне егзотичне ствари са величином бафера за всги_, које се у нашем случају не уклапају у реч „ни на који начин“.

Генерално, одлучили смо да проблем није проблем, узимајући у обзир чињеницу да у нашим количинама није нимало критичан.

Тачно док ме није збунио следећи проблем: у неким случајевима, везе се отварају без проблема преко хттп, али потпуно одбијају да раде преко хттпс, стварајући дивно: Веза #0 са хостом екампле.цом остала је нетакнута
цурл: (52) Празан одговор са сервера

У логовима смо ову ствар могли да пратимо само по ИП-у - није било захтева или било каквих других података, као што се види из примера изнад. Само озлоглашени статус је 0, али знам да нисам прекинуо захтев! Почео сам да схватам шта би могло поћи по злу. И све се показало врло једноставно:

слушајте 443 ссл хттп2 бацклог=8192;

Па, ако користите хттп2 за ссл везе, онда није довољно само да конфигуришете бафере захтева, они такође морају бити конфигурисани у нгк_хттп_в2_модуле, наиме:

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

Ограничава максималну величину заглавља захтева компримованог помоћу ХПАЦК-а. Ограничење се подједнако примењује и на име и на вредност. Ако се користи Хафманово кодирање, стварна величина распакованих низова имена и вредности може бити већа. Подразумевано ограничење је погодно за већину упита.

Генерално, то је то. А зашто све? Зато што је дужина везе била дуга - дужа од тих истих 4к.

Постављањем на, на пример, 8 кб (или онолико колико је вероватно довољно), решавамо проблем.
Такве ствари.

Извор: ввв.хабр.цом

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