[Nginx] Si të mposhtni statusin e përgjigjes = 0

Një artikull nga kategoria e "shënimet anësore".

TL: DR:

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

Në një nga projektet, pasi ndryshova një logjikë të brendshme të backend-it, fillova të vëzhgoja një kod të çuditshëm përgjigjeje në regjistrat, përkatësisht 0. Në regjistrat duket diçka si kjo:

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


Leximi i dokumentacionit dhe kërkimi në google për këtë temë nuk dhanë absolutisht asgjë - sepse ... Thuhet se kjo sjellje ndodh kur klienti mbylli lidhjen pa kaluar kokat. Epo, dhe gjëra të ndryshme ekzotike me madhësinë e tamponit për wsgi_, të cilat në rastin tonë nuk i përshtateshin fjalës "në asnjë mënyrë".

Në përgjithësi, ne vendosëm që problemi nuk është problem, duke marrë parasysh faktin se në vëllimet tona nuk është aspak kritik.

Pikërisht derisa u hutova nga problemi i mëposhtëm: në disa raste, lidhjet hapen pa probleme përmes http, por refuzojnë plotësisht të punojnë përmes https, duke prodhuar mrekullinë: Lidhja #0 me hostin example.com ka mbetur e paprekur
curl: (52) Përgjigje boshe nga serveri

Në regjistrat, ne ishim në gjendje ta gjurmojmë këtë gjë vetëm me IP - nuk kishte asnjë kërkesë ose ndonjë të dhënë tjetër, siç mund të shihet nga shembulli i mësipërm. Vetëm statusi famëkeq është 0, por e di që nuk e kam ndërprerë kërkesën! Fillova të kuptoj se çfarë mund të shkojë keq. Dhe gjithçka doli të ishte shumë e thjeshtë:

degjo 443 ssl http2 prapambetura=8192;

Epo, nëse përdorni http2 për lidhjet ssl, atëherë nuk mjafton vetëm të konfiguroni buferat e kërkesave, ato gjithashtu duhet të konfigurohen në ngx_http_v2_module, përkatësisht:

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

Kufizon madhësinë maksimale të kokës së kërkesës të ngjeshur duke përdorur HPACK. Kufizimi zbatohet njëlloj si për emrin ashtu edhe për vlerën. Nëse përdoret kodimi Huffman, madhësia aktuale e vargjeve të emrit dhe vlerave të papaketuara mund të jetë më e madhe. Kufiri i paracaktuar është i përshtatshëm për shumicën e pyetjeve.

Në përgjithësi, kjo është ajo. Dhe pse të gjitha? Sepse gjatësia e lidhjes ishte e gjatë - më e gjatë se të njëjtat 4k.

Duke e vendosur në, për shembull, 8 kb (ose aq sa ka të ngjarë të jetë e mjaftueshme), ne e zgjidhim problemin.
Ashtu shkon.

Burimi: www.habr.com

Shto një koment