[Nginx] Response_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 SSL сонс http2 хоцролт = 8192;

Хэрэв та ssl холболтод http2 ашигладаг бол хүсэлтийн буферийг тохируулахад хангалттай биш бөгөөд тэдгээрийг ngx_http_v2_module-д тохируулсан байх ёстой, тухайлбал:

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

HPACK ашиглан шахсан хүсэлтийн толгой хэсгийн дээд хэмжээг хязгаарладаг. Хязгаарлалт нь нэр болон утгын аль алинд нь адилхан хамаарна. Хэрэв Huffman кодчилол ашигласан бол задалсан нэр болон утгын мөрийн бодит хэмжээ илүү том байж болно. Өгөгдмөл хязгаар нь ихэнх асуулгад тохиромжтой.

Ерөнхийдөө ийм л байна. Тэгээд яагаад бүгд? Учир нь холбоосын урт нь ижил 4к-ээс урт байсан.

Үүнийг жишээ нь 8кб (эсвэл хангалттай байх магадлалтай) болгож тохируулснаар бид асуудлыг шийддэг.
Ийм зүйлс.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх