[Nginx] answer_status = 0 ni qanday engish mumkin

β€œYon yozuvlar” toifasidan maqola.

Sh.b.: doktor:

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

Loyihalardan birida, ba'zi bir ichki mantiqni o'zgartirgandan so'ng, men jurnallarda g'alati javob_kodni, ya'ni 0 ni kuzata boshladim. Jurnallarda u quyidagicha ko'rinadi:

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


Hujjatlarni o'qish va ushbu mavzu bo'yicha googling hech narsa bermadi - chunki ... Ta'kidlanishicha, bunday xatti-harakatlar mijoz sarlavhalarni o'tkazmasdan ulanishni yopganida sodir bo'ladi. Xo'sh, wsgi_ uchun bufer o'lchamiga ega turli xil ekzotik narsalar, bizning holatlarimizda "hech qanday tarzda" so'ziga mos kelmaydi.

Umuman olganda, bizning hajmlarimizda bu unchalik muhim emasligini hisobga olib, muammo muammo emas deb qaror qildik.

Aynan shu muammo meni hayratda qoldirmagunimcha: ba'zi hollarda havolalar http orqali muammosiz ochiladi, lekin https orqali ishlashdan butunlay voz kechib, ajoyib: example.com xostiga β„–0 ulanish o'zgarishsiz qoldi.
curl: (52) Serverdan bo'sh javob

Jurnallarda biz buni faqat IP orqali kuzatishimiz mumkin edi - yuqoridagi misoldan ko'rinib turibdiki, hech qanday so'rov yoki boshqa ma'lumotlar yo'q edi. Faqat notanish holat 0, lekin men so'rovni to'xtatmaganimni bilaman! Men nima noto'g'ri bo'lishi mumkinligini tushuna boshladim. Va hamma narsa juda oddiy bo'lib chiqdi:

443 ssl tinglang https orqada qolish = 8192;

Xo'sh, agar siz ssl ulanishlari uchun http2 dan foydalansangiz, so'rov buferlarini sozlashning o'zi etarli emas, ular ngx_http_v2_moduleda ham sozlanishi kerak, xususan:

Бинтаксис:	http2_max_field_size Ρ€Π°Π·ΠΌΠ΅Ρ€;
Π£ΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΠ΅:	http2_max_field_size 4k;
ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚:	http, server

HPACK yordamida siqilgan so'rov sarlavhasining maksimal hajmini cheklaydi. Cheklov nomga ham, qiymatga ham teng qo'llaniladi. Agar Huffman kodlash ishlatilsa, unpacked nomi va qiymat satrlarining haqiqiy hajmi kattaroq bo'lishi mumkin. Ko'pgina so'rovlar uchun standart chegara mos keladi.

Umuman olganda, bu shunday. Va nima uchun hammasi? Chunki havolaning uzunligi uzun edi - o'sha 4k dan uzunroq edi.

Uni, masalan, 8kb (yoki etarli bo'lishi mumkin bo'lgan darajada) ga o'rnatib, biz muammoni hal qilamiz.
Shunday bo'ladi.

Manba: www.habr.com

a Izoh qo'shish