การอัปเดตล่าสุดของ zlib เนื่องจาก ช่องโหว่ด้านความปลอดภัย ดูเหมือนจะทำให้เกิดปัญหาใหญ่เมื่อให้บริการ PHP-FPM 8.0 ผ่าน nginx บน Ubuntu focal คำขอใด ๆ ที่มีการเข้ารหัส gzip ล้มเหลวตั้งแต่เริ่มต้นการตอบสนอง แม้ว่า nginx จะบันทึกคำขอว่าสำเร็จและมีขนาดถูกต้อง ถ้าฉันส่งคำขอโดยไม่มี ยอมรับการเข้ารหัส
ส่วนหัวมันทำงานได้อย่างสมบูรณ์แบบวิธีแก้ปัญหา ฉันพยายามปิดใช้งานการสนับสนุน gzip ทั้งหมด แต่ดูเหมือนว่าจะคงอยู่ถาวรอย่างน่าทึ่ง... จนถึงตอนนี้ฉันได้ลองการตั้งค่าเหล่านี้ใน nginx:
gzip ปิด;
ปิด fastcgi_buffering;
add_header ยอมรับการเข้ารหัส "";
proxy_set_header ยอมรับการเข้ารหัส "";
และฉันได้ตรวจสอบด้วยว่าไม่มีคำสั่งอื่นใดที่เปิดใช้งานอีกครั้งโดย grepping nginx -T
เอาต์พุต
อย่างไรก็ตาม หากฉันดัมพ์ส่วนหัวของคำขอจาก PHP (เช่น หลังจากผ่าน nginx แล้ว) ฉันยังคงเห็นส่วนหัวที่ยอมรับนี้:
ยอมรับการเข้ารหัส: deflate, gzip, br, zstd
ดังนั้น nginx จึงเป็น ไม่ ตัดออกจากคำขอก่อนที่จะส่งผ่านไปยัง PHP-FPM ฉันได้ลองตั้งค่าคำสั่งเหล่านี้ที่ระดับเซิร์ฟเวอร์และตำแหน่งแล้ว ด้วยผลลัพธ์เดียวกัน
ใน PHP ฉันได้ปิดใช้งานการบัฟเฟอร์เอาต์พุตทั้งหมด แต่ดูเหมือนจะเป็นไปไม่ได้ที่จะปิดใช้งาน zlib โดยไม่ต้องคอมไพล์ใหม่
ฉันจะทำให้ nginx ตัดส่วนหัวคำขอนี้ออกได้อย่างไร เพื่อที่ทั้ง nginx และ PHP จะไม่บีบอัดการตอบสนอง