[Nginx] ریسپانس_سٹیٹس = 0 کو کیسے شکست دیں۔

"sidenotes" کے زمرے سے ایک مضمون۔

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


اس موضوع پر دستاویزات کو پڑھنے اور گوگل کرنے سے بالکل کچھ حاصل نہیں ہوا - کیونکہ... یہ بیان کیا گیا ہے کہ یہ سلوک اس وقت ہوتا ہے جب کلائنٹ نے ہیڈرز کو پاس کیے بغیر کنکشن بند کر دیا۔ ٹھیک ہے، اور wsgi_ کے لیے بفر سائز کے ساتھ مختلف غیر ملکی چیزیں، جو ہمارے معاملے میں لفظ "کسی بھی طرح" کے مطابق نہیں تھیں۔

عام طور پر، ہم نے فیصلہ کیا کہ مسئلہ کوئی مسئلہ نہیں ہے، اس حقیقت کو مدنظر رکھتے ہوئے کہ ہماری جلدوں میں یہ بالکل بھی نازک نہیں ہے۔

بالکل اس وقت تک جب تک کہ میں درج ذیل مسئلے سے پریشان نہ ہوں: کچھ معاملات میں، لنکس http کے ذریعے بغیر کسی پریشانی کے کھلتے ہیں، لیکن https کے ذریعے کام کرنے سے مکمل طور پر انکار کر دیتے ہیں، جس سے شاندار: کنکشن #0 کی میزبانی مثال ڈاٹ کام کو برقرار رکھا گیا ہے۔
curl: (52) سرور سے خالی جواب

لاگز میں، ہم اس چیز کو صرف IP کے ذریعے ٹریک کرنے کے قابل تھے - کوئی درخواست یا کوئی اور ڈیٹا نہیں تھا، جیسا کہ اوپر دی گئی مثال سے دیکھا جا سکتا ہے۔ صرف بدنام کی حیثیت 0 ہے، لیکن میں جانتا ہوں کہ میں نے درخواست میں خلل نہیں ڈالا! میں نے یہ جاننا شروع کیا کہ کیا غلط ہو سکتا ہے۔ اور سب کچھ بہت آسان نکلا:

سنیں 443 ایس ایس ایل http2 backlog=8192;

ٹھیک ہے، اگر آپ ssl کنکشن کے لیے http2 استعمال کرتے ہیں، تو صرف درخواست کے بفرز کو کنفیگر کرنا کافی نہیں ہے، انہیں ngx_http_v2_module میں بھی کنفیگر کیا جانا چاہیے، یعنی:

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

HPACK کا استعمال کرتے ہوئے کمپریس کردہ درخواست ہیڈر کے زیادہ سے زیادہ سائز کو محدود کرتا ہے۔ رکاوٹ نام اور قدر دونوں پر یکساں طور پر لاگو ہوتی ہے۔ اگر Huffman انکوڈنگ کا استعمال کیا جاتا ہے، تو پیک نہ کیے گئے نام اور ویلیو سٹرنگز کا اصل سائز بڑا ہو سکتا ہے۔ ڈیفالٹ حد زیادہ تر سوالات کے لیے موزوں ہے۔

عام طور پر، یہ ہے. اور سب کیوں؟ کیونکہ لنک کی لمبائی لمبی تھی - انہی 4k سے لمبی۔

اسے ترتیب دے کر، مثال کے طور پر، 8kb (یا جتنا کافی ہونے کا امکان ہے)، ہم مسئلہ حل کرتے ہیں۔
ایسی چیزیں۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں