วิธีที่ดีที่สุดในการดีบักไฟล์กำหนดค่า nginx


37

ฉันมีกฎการเขียนซ้ำจำนวนมากที่ฉันต้องพอร์ตจาก apache ถึง nginx

มันเป็นกระบวนการที่ค่อนข้างเจ็บปวดเพราะฉันไม่สามารถดูว่ากฎการเขียนใหม่ของฉันและเงื่อนไข "ถ้า" ทำงานได้ตามที่ฉันต้องการหรือไม่

Apache มีการดีบักสำหรับโมดูลการเขียนใหม่ ฉันจะทำอะไรเพื่อ nginx

คำตอบ:


37

เปิดใช้งานrewrite_log:

rewrite_log on;

และตั้งค่าระดับการดีบักในerror_logคำสั่ง:

error_log /var/log/nginx/localhost.error_log notice;

ใกล้กับ Apache;) ฉันต้องดู nginx แน่นอน
Olivier Pons

โปรดทราบว่าสิ่งนี้สามารถใช้งานได้นานกว่าการดีบักการเขียนซ้ำ คุณสามารถเพิ่ม "การแก้ไขข้อบกพร่อง DEBUG DEBUG ใหม่ได้" ทุกที่ที่คุณต้องการในการกำหนดค่า nginx และดูว่าเมื่อใดที่มันถูกโจมตี บรรทัดเขียนใหม่นี้อย่างมีประสิทธิภาพไม่ทำอะไรเลย (ถ้าตรงกับตำแหน่ง "DEBUG" แทนที่ด้วย "DEBUG") นอกเหนือจากการทริกเกอร์บรรทัดที่จะเข้าสู่ระบบ ในทางเทคนิคคุณสามารถเอาท์พุทตัวแปรแบบนี้ได้: "rewrite. * $ request break;" หรือเขียนใหม่ * "'$ http_x_forwarded_for' $ คำขอ" ตัวแบ่ง; - แม้ว่าสิ่งนี้จะทำให้การร้องขอล้มเหลว มันจะเป็นการดีกว่าถ้าคุณเพิ่มตัวแปรลงในรูปแบบบันทึกที่กำหนดเองสำหรับ access_log
เคอร์ติส Yallop

14

เปิดใช้งานการสนับสนุนการดีบักจากนั้นตั้งค่าระดับการดีบักใน error_log

error_log   /var/log/nginx/error.log debug;

ตอนนี้คุณสามารถบันทึกและส่งคำขอของคุณผ่าน อาจมีรายละเอียดมากกว่าที่คุณต้องการ แต่บางครั้งอาจเป็นผู้ช่วยชีวิต

โอ้และคุณควรระวังว่าถ้าเป็นสิ่งชั่วร้ายในบริบทตำแหน่งอย่างน้อย ...


3
noticeจะดีกว่าdebugในขณะที่error_levelสำหรับการดีบักเขียนใหม่เพราะมันจะข้ามจำนวนมากของระดับต่ำข้อมูลที่ไม่เกี่ยวข้องแก้ปัญหา (เช่น SSL หรือ gzip รายละเอียด; 50 + เส้นต่อคำขอ)
Dan Dascalescu

1

การใช้บันทึกและและการสนับสนุนการดีบักในตัวเป็นวิธีที่เหมาะสมที่สุดอย่างแน่นอน หากคุณกำลังทำการดีบักการจัดเส้นทางอย่างรวดเร็วในระยะเริ่มต้นและต้องการโต้ตอบผ่านเบราว์เซอร์ / ไคลเอ็นต์เท่านั้นโดยใช้return 4xx "text"; คำสั่งอาจให้คำตอบที่คุณต้องการด้วยความพยายามน้อยมาก ตัวอย่างเช่น,

http {
  server {
    listen 80;
    server_name mydomain.net;
    return 404 "mydomain 80 route";
  }

  server {
    listen 80 default_server;
    return 404 "default 80 route";
  }
}

ข้อความในหน้าเว็บที่ส่งคืนจะบอกคุณว่าserverบล็อกคำขอของคุณถูกเรียก

หวังว่านี่จะช่วยได้!
อันเดรส

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