[Nginx] วิธีเอาชนะ response_status = 0

บทความจากหมวดหมู่ "sidenotes"

TL: DR:

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

ในโปรเจ็กต์หนึ่ง หลังจากเปลี่ยนตรรกะภายในของแบ็กเอนด์ ฉันเริ่มสังเกตเห็น response_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": ""
}


การอ่านเอกสารและ googling ในหัวข้อนี้ไม่ได้ผลอะไรเลย - เพราะ... มีการระบุว่าลักษณะการทำงานนี้เกิดขึ้นเมื่อไคลเอนต์ปิดการเชื่อมต่อโดยไม่ผ่านส่วนหัว และสิ่งแปลกใหม่ต่าง ๆ ที่มีขนาดบัฟเฟอร์สำหรับ wsgi_ ซึ่งในกรณีของเราไม่เหมาะกับคำว่า "ในทางใดทางหนึ่ง"

โดยทั่วไป เราตัดสินใจว่าปัญหานั้นไม่ใช่ปัญหา โดยคำนึงถึงข้อเท็จจริงที่ว่าในปริมาณของเรานั้นไม่ได้สำคัญเลย

จนกระทั่งฉันงงกับปัญหาต่อไปนี้: ในบางกรณี ลิงก์เปิดโดยไม่มีปัญหาผ่าน http แต่ปฏิเสธที่จะทำงานผ่าน https โดยสมบูรณ์ ทำให้เกิดสิ่งที่ยอดเยี่ยม: การเชื่อมต่อ #0 ไปยังโฮสต์ example.com ยังคงเหมือนเดิม
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 เดิม

ด้วยการตั้งค่าเป็น 8kb (หรือมากเท่าที่น่าจะเพียงพอ) เราก็สามารถแก้ไขปัญหาได้
สิ่งดังกล่าว

ที่มา: will.com

เพิ่มความคิดเห็น