مقال من فئة "الملاحظات الهامشية".
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 ، مما يمنحني ميزة رائعة: Connection # 0 لاستضافة example.com تركت سليمة
حليقة: (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 كيلوبايت (أو بقدر ما يكفي على الأرجح) - نحل المشكلة.
مثل هذه الأشياء.
المصدر: www.habr.com