[Nginx] ڪيئن شڪست ڏئي جواب_ اسٽيٽس = 0

"sidenotes" جي درجي مان هڪ مضمون.

TL: ڊبليو:

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


دستاويز پڙهڻ ۽ هن موضوع تي گوگلنگ بلڪل ڪجھ به نه مليو - ڇاڪاڻ ته ... اهو بيان ڪيو ويو آهي ته اهو رويو تڏهن ٿئي ٿو جڏهن ڪلائنٽ ڪنيڪشن بند ڪري ڇڏي بغير هيڊرن کي پاس ڪرڻ جي. خير، ۽ wsgi_ لاءِ بفر سائيز سان گڏ مختلف غير معمولي شيون، جيڪي اسان جي صورت ۾ لفظ "ڪنهن به طريقي سان" مناسب نه ٿيون.

عام طور تي، اسان فيصلو ڪيو ته مسئلو ڪو مسئلو ناهي، انهي حقيقت کي نظر ۾ رکندي ته اسان جي مقدار ۾ اهو تمام نازڪ ناهي.

بلڪل جيستائين مون کي هيٺين مسئلي کان حيران ڪيو ويو: ڪجهه حالتن ۾، لنڪ http ذريعي بغير ڪنهن مسئلن جي کليل آهن، پر مڪمل طور تي https ذريعي ڪم ڪرڻ کان انڪار ڪري ٿو، شاندار پيدا ڪري ٿو: Connection #0 to host example.com برقرار رهي
curl: (52) سرور کان خالي جواب

لاگن ۾، اسان هن شيء کي صرف IP ذريعي ٽريڪ ڪرڻ جي قابل هئا - ڪابه درخواست يا ٻيو ڪو ڊيٽا نه هو، جيئن مٿي ڏنل مثال مان ڏسي سگهجي ٿو. صرف بدنام حيثيت 0 آهي، پر مون کي خبر آهي ته مون درخواست ۾ مداخلت نه ڪئي! مون اهو سمجهڻ شروع ڪيو ته ڇا غلط ٿي سگهي ٿو. ۽ سڀڪنھن شيء کي تمام سادو ٿي ويو:

ٻڌي اي ايم اين ايس ايس ايس http2 پٺاڻ = 8192؛

خير، جيڪڏهن توهان ssl ڪنيڪشن لاءِ http2 استعمال ڪريو ٿا، پوءِ اهو ڪافي ناهي ته صرف درخواست بفرن کي ترتيب ڏيڻ لاءِ، انهن کي پڻ ngx_http_v2_module ۾ ترتيب ڏيڻ گهرجي، يعني:

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

HPACK استعمال ڪندي compressed درخواست هيڊر جي وڌ ۾ وڌ سائيز کي محدود ڪري ٿو. پابندي برابر لاڳو ٿئي ٿي نالي ۽ قدر ٻنهي تي. جيڪڏهن Huffman انڪوڊنگ استعمال ڪيو ويندو آهي، اڻ ڄاتل نالو ۽ قدر واري تار جي حقيقي سائيز وڏي ٿي سگهي ٿي. ڊفالٽ حد اڪثر سوالن لاء مناسب آهي.

عام طور تي، اهو ئي آهي. ۽ سڀ ڇو؟ ڇاڪاڻ ته لنڪ جي ڊيگهه ڊگهي هئي - انهن ساڳين 4k کان وڌيڪ.

ان کي ترتيب ڏيڻ سان، مثال طور، 8kb (يا جيترو ممڪن آهي)، اسان مسئلو حل ڪريون ٿا.
سو وڃي ٿو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو