nginx: บันทึกคำขอ / ตอบกลับที่สมบูรณ์กับส่วนหัวทั้งหมดหรือไม่


44

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

nginx สามารถบันทึกคำขอ / การตอบสนองที่สมบูรณ์ (เช่นการจับพู้ทำเล่น) ไปยังไฟล์ได้หรือไม่ดังนั้นเราจึงสามารถเห็นคำขอที่ส่งมาก่อนการแฮงค์ได้หรือไม่

(เราอาจต้องหลีกเลี่ยง pcap และวิธีการนั้นและทำทุกอย่างใน nginx)

หาก nginx ไม่ใช่เครื่องมือที่เหมาะสมสำหรับสิ่งนี้ (นอกเหนือจากตัววิเคราะห์เครือข่าย) อาจเป็นเท่าใด


1
mitmproxyในโหมด reverse proxy ควรทำในสิ่งที่คุณต้องการ
Vivek Thomas

@VivekThomas นี่เป็นคำถาม nginx .... เราใช้ nginx อยู่แล้วและจะไม่เปลี่ยนแปลง
samsmith

3
@samsmith คำถามเก่า แต่อาจช่วยคนอื่น: คุณไม่ต้องยอมแพ้ nginx คุณสามารถกำหนดเส้นทาง nginx ไปยังพอร์ตอื่นชั่วคราวเพื่ออนุญาตให้ mitmproxy สกัดกั้นการรับส่งข้อมูลและรองรับการแก้ไขข้อบกพร่อง จากนั้นเมื่อเสร็จสิ้นคุณสามารถกำหนดเส้นทาง nginx ไปยังพอร์ตเดิมและปิดระบบ mitmproxy
ต่อ Lundberg

1
คุณสามารถใช้โมดูล modsecurity ซึ่งสามารถบันทึกคำขอ / การตอบกลับทั้งหมดได้ที่nginx.com/blog/modsecurity-logging-and-debugging
Willem

คำตอบ:


44

หากต้องการรับเนื้อหาคำขอที่ส่งมาจากผู้เยี่ยมชมให้ใช้client_body_in_file_only on;และบันทึกไฟล์ "ชั่วคราว" ที่เขียนไว้ในบันทึกโดยการต่อท้าย var $request_body_fileกับรูปแบบบันทึก ไฟล์ "ชั่วคราว" จะอยู่ในไดเรกทอรี client_temp ตามค่าเริ่มต้น

คุณสามารถเข้าสู่ระบบส่วนหัวของคำขอเกินไปและส่งส่วนหัวกับ$http_<header>$sent_http_<header>

หากคุณมีคำขอร่างกายและส่วนหัวคุณควรจะสามารถเล่นซ้ำและได้รับการตอบสนองของผู้เข้าชม

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


1
@ jwadsack อ่านคำตอบอย่างระมัดระวัง
ซาเวียร์ลูคัส

4
@XavierLucas ฉันคิดว่าคุณให้แนวทางที่แตกต่างกันสองแบบ ฉันไม่ได้ตระหนักว่าคุณกำลังพูดทั้งสอง client_body_in_file_onlyและ$http_<header>จะต้อง ฉันเข้าใจแล้ว
jwadsack

5
คุณช่วยแบ่งปันรหัสที่แม่นยำมากขึ้นได้ไหม
Velkan

3
$ http <header> แน่นอนมีประโยชน์เฉพาะเมื่อคุณทราบชื่อส่วนหัวทั้งหมดล่วงหน้า
Ed Randall

2
มีคนแบ่งปันส่วนของการกำหนดค่า nginx ที่แท้จริงได้ไหม
Nowaker

17

mitmproxyดูเหมือนจะเป็นเครื่องมือที่เหมาะสมในการทำสิ่งที่คุณขอ

mitmproxy เป็นพร็อกซี man-in-the-middle ที่สามารถใช้งาน SSL สำหรับ HTTP พร้อมคอนโซลอินเตอร์เฟส

mitmdump เป็นเวอร์ชันบรรทัดคำสั่งของ mitmproxy คิดว่า tcpdump สำหรับ HTTP

คุณสมบัติ

  • สกัดกั้นคำขอ HTTP และการตอบกลับและแก้ไขได้ทันที
  • บันทึกการสนทนา HTTP ที่สมบูรณ์เพื่อเล่นซ้ำและวิเคราะห์ในภายหลัง
  • เล่นซ้ำฝั่งไคลเอนต์ของการสนทนา HTTP เล่นซ้ำการตอบสนอง HTTP ของเซิร์ฟเวอร์ที่บันทึกไว้ก่อนหน้านี้
  • ย้อนกลับโหมดพร็อกซีเพื่อส่งต่อการรับส่งข้อมูลไปยังเซิร์ฟเวอร์ที่ระบุ
  • โหมดพร็อกซีแบบโปร่งใสบน OSX และ Linux
  • ทำการเปลี่ยนแปลงสคริปต์กับทราฟฟิก HTTP โดยใช้ Python
  • ใบรับรอง SSL สำหรับการสกัดกั้นถูกสร้างขึ้นทันที

โหมดพร็อกซีย้อนกลับจะช่วยให้คุณสามารถจับการร้องขอและการตอบสนองเช่นเดียวกับ Fiddler

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.