ขนาดของฟิลด์ส่วนหัวคำขอเกินขีด จำกัด เซิร์ฟเวอร์เนื่องจากมีค่า If-None-Match จำนวนมาก


8

นี่เป็นกรณีที่น่าสนใจของลูกค้าที่ได้รับข้อผิดพลาด "400 Bad Request" และดูเหมือนไม่สามารถดูหน้าแรกของ drupal ที่โฮสต์บน Ubuntu 12.04.3 LTS โดยใช้ Apache / 2.2.22:

Bad Request
เบราว์เซอร์ของคุณส่งคำขอว่าเซิร์ฟเวอร์นี้ไม่สามารถเข้าใจ
ขนาดของฟิลด์ส่วนหัวคำขอเกินขีด จำกัด เซิร์ฟเวอร์

แพ็คเก็ตการส่งออกดมกลิ่น:

...
T 2013/09/02 15:23:10.458167 ###.###.###.###:40027 -> ###.###.###.###:80 [A]
GET / HTTP/1.0.
If-None-Match: "1363160742-0", "1363165573-1", "1363175854-1", "1363175854-0", "1363179616-0", "1363181811-0", "1363239319-1", "1363255903-0", "1363259282-0", "1363263398-1", "1363274564-0", "1363329642-0", "1363332613-1", "1363333851-0", "1363599826-0", "1363678909-0", "1363684227-1", "1363699732-0", "1363755181-0", "1363765691-1", "1363767178-0", "1363780208-0", "1363787589-0", "1363795259-1", "1363852409-1", "1363863225-1", "1363928115-0", "1363951793-0", "1363951793-1", "1364133610-1", "1364187608-1", "1364187608-0", "1364203083-0", "1364208174-0", "1364214930-0", "1364219815-0", "1364274441-1", "1364280930-0", "1364280930-1", "1364286055-1", "1364298840-0", "1364298840-1", "1364360674-0", "1364364356-1", "1364381508-0", "1364385520-1", "1364460734-0", "1364882595-1", "1364903271-0", "1364967946-0", "1364967946-1", "1364981713-0", "1364985142-1", "1364992835-1", "1365061578-0", "1365065290-1", "1365076128-0", "1365141088-1", "1365167701-0", "1365171024-0", "1365402404-1", "1365402404-0", "1365411731-1", "1365416882-0", "1365476715-0", "1365487578-0", "1365488880-1", "1365503922-1", "1365514224-1", "1365579101-0", "1365580320-0", "1365582817-0", "1365584926-0", "1365589524-0", "1365608307-0", "1365649987-0", "1365682295-0", "1365685083-0", "1365770532-1", "1365770532-0", "1365844566-0", "1365996619-1", "1366093719-1", "1366093719-0", "1366115408-0", "1366180275-1", "1366186431-0", "1366196476-0", "13662669
...

ในขั้นตอนนี้ฉันไม่แน่ใจ 100% ว่าจะถูก จำกัด เฉพาะลูกค้าที่เฉพาะเจาะจง แต่ข้อผิดพลาดถูกรายงานโดยผู้ใช้ที่มีสตริงตัวแทนผู้ใช้ต่อไปนี้:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/534.57.7 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.7

ตอนนี้คำถามยังคงทำอย่างไรมันเป็นปัญหาของเซิร์ฟเวอร์หรือลูกค้าที่ทำงานผิดปกติหรือไม่?


นี่ไม่ใช่คำถามของ Ubuntu ดูบันทึก Apache และใช้สิ่งนั้นเพื่อจัดหาความช่วยเหลือในชุมชนพิเศษ
Luís de Sousa

ความคิดของฉันคือว่ามันอาจเป็นปัญหาค่าเริ่มต้นของ Ubuntu
inetpro

1
เรากำลังพูดถึงเว็บเซิร์ฟเวอร์ที่ทำงานบน Ubuntu - ดังนั้นจึงไม่ได้อยู่นอกหัวข้อ ตามที่ @ LuísdeSousaแนะนำให้ดูที่/var/log/apache2/error.logเพื่อค้นหาขีด จำกัด ที่ถูกละเมิด
guntbert

@ LuísdeSousaเราสนับสนุนทุกส่วนของ Ubuntu Server ที่นี่ ทำไมสิ่งนี้จึงไม่ใช่คำถามของ Ubuntu
Eliah Kagan

@guntbert ส่วนที่น่าสนใจก็คือว่าทั้งคำขอที่ไม่ใช่ข้อผิดพลาดที่เกิดขึ้นจริงจะถูกบันทึกไว้ในบันทึก apache มันถูกบันทึกไว้ในพร็อกซีย้อนกลับปลาหมึกและฉันคาดเดาว่าพร็อกซีเป็นสาเหตุจริง
inetpro

คำตอบ:


11

คุณพบปัญหาแล้ว ตัวแทนผู้ใช้บางคนและคำขอบางอย่างมีขนาดใหญ่เกินไปสำหรับค่าเริ่มต้นของเว็บเซิร์ฟเวอร์ ดูเหมือนว่าปัญหาโง่ที่จะวิ่งเข้ามา nginxแต่มันก็ช่วยให้เกิดขึ้นกับผมใน โดยปกติเมื่อมีชื่อคุกกี้ที่โง่และอัปโหลดที่เกิดขึ้น ... อย่างไรก็ตาม ...

การแก้ปัญหาคือเพียงแค่กระแทกขีด จำกัด การร้องขอ คุณสามารถทำเช่นนี้ทั่วโลกหรือเพียงแค่สำหรับเว็บไซต์ของคุณด้วยสั่ง :LimitRequestFieldSize

LimitRequestFieldSize 32768

นั่นเป็นขีด จำกัด 32KB (เพิ่มขึ้นจากค่าเริ่มต้นของ 8KB)


นั่นคือสิ่งที่ฉันคิด แต่ฉันไม่แน่ใจเกี่ยวกับขนาดที่แนะนำ ขอบคุณ!
inetpro

1
การเพิ่มขึ้นLimitRequestFieldSizeเป็น32768ไม่ได้ช่วย
inetpro

@inetpro คุณรีสตาร์ท Apache หรือไม่ และเป็นบริบทที่สูงเพียงพอหรือไม่ สิ่งนี้จะไม่ทำงานในไฟล์. htaccess
Oli

1
คุณใส่รายการในโฮสต์เสมือนตามชื่อที่กำหนดไว้หรือในรายการอื่นหรือไม่? เอกสารกล่าวว่า "เมื่อชื่อ-based virtual hosting จะใช้ค่าสำหรับคำสั่งนี้จะนำมาจากค่าเริ่มต้น (ครั้งแรกที่ระบุไว้) โฮสต์เสมือนสำหรับ NameVirtualHost การเชื่อมต่อถูกแมปไป." ดูเหมือนว่าคุณจะทำได้ดีกว่าในการกำหนดค่าระดับโลก ปัญหาในการทำมันในโฮสต์เสมือนคือมันเป็นส่วนหัวคำขอตัวเองมีชื่อของโฮสต์เสมือนที่จำเป็น
Robie Basak

2
LimitRequestFieldSize 65536LimitRequestLine 65536LimitXMLRequestBody 0⓸ ??? ⓹ℙℛṎℱỈᎢ☕
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.