[Nginx] Ինչպես հաղթել answer_status = 0

Հոդված «կողմնակի նշումներ» կատեգորիայից։

TL: DR:

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

Նախագծերից մեկում, հետնամասի որոշ ներքին տրամաբանությունը փոխելուց հետո, ես սկսեցի դիտարկել տարօրինակ answer_code տեղեկամատյաններում, այն է՝ 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": ""
}


Փաստաթղթերի ընթերցումը և այս թեմայի շուրջ գուգլելը բացարձակապես ոչինչ չտվեց, քանի որ... Նշվում է, որ այս վարքագիծն առաջանում է, երբ հաճախորդը փակել է կապը՝ առանց վերնագրերը փոխանցելու։ Դե, և wsgi_-ի բուֆերային չափերով տարբեր էկզոտիկ իրեր, որոնք մեր դեպքում ոչ մի կերպ չէին համապատասխանում «ոչ մի կերպ» բառին։

Ընդհանուր առմամբ, մենք որոշեցինք, որ խնդիրը խնդիր չէ՝ հաշվի առնելով այն, որ մեր ծավալներում այն ​​ամենևին էլ կրիտիկական չէ։

Հենց այնքան ժամանակ, քանի դեռ ես տարակուսում էի հետևյալ խնդրով. որոշ դեպքերում հղումները բացվում են առանց խնդիրների http-ի միջոցով, բայց ամբողջովին հրաժարվում են աշխատել https-ի միջոցով՝ ստեղծելով հիանալի.
curl: (52) Դատարկ պատասխան սերվերից

Տեղեկամատյաններում մենք կարողացանք հետևել այս բանին միայն IP-ով. ոչ մի հարցում կամ որևէ այլ տվյալ չկար, ինչպես երևում է վերևի օրինակից: Միայն տխրահռչակ կարգավիճակն է 0, բայց ես գիտեմ, որ ես չեմ ընդհատել հարցումը: Ես սկսեցի հասկանալ, թե ինչ կարող է սխալ լինել: Եվ ամեն ինչ պարզվեց, որ շատ պարզ է.

ունկնդրիր 443 ssl http2 հետնահերթ=8192;

Դե, եթե դուք օգտագործում եք http2 ssl միացումների համար, ապա դա բավարար չէ միայն կարգավորել հարցումների բուֆերները, դրանք պետք է նաև կազմաձևվեն ngx_http_v2_module-ում, մասնավորապես.

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

Սահմանափակում է HPACK-ի միջոցով սեղմված հարցման վերնագրի առավելագույն չափը: Սահմանափակումը հավասարապես կիրառվում է և՛ անվան, և՛ արժեքի վրա: Եթե ​​օգտագործվում է Huffman կոդավորումը, ապա չփաթեթավորված անվանման և արժեքի տողերի իրական չափը կարող է ավելի մեծ լինել: Լռելյայն սահմանաչափը հարմար է հարցումների մեծ մասի համար:

Ընդհանուր առմամբ, սա է. Իսկ ինչու՞ բոլորը: Քանի որ հղման երկարությունը երկար էր՝ ավելի երկար, քան այդ նույն 4k-ը:

Սահմանելով այն, օրինակ, 8 կբ (կամ այնքան, որքան հնարավոր է բավարար լինի), մենք լուծում ենք խնդիրը:
Այսպիսով, այն գնում է:

Source: www.habr.com

Добавить комментарий