การเอาชนะ nginx access_log directive - รายการบันทึกที่ซ้ำกัน


16

ฉันใช้แพคเกจเริ่มต้น nginx บนเซิร์ฟเวอร์ Ubuntu 14.04 มันถูกใช้/etc/nginx/nginx.confเป็นหลักการตั้งค่าและจากนั้นรวมถึงการกำหนดค่าจากและ/etc/nginx/conf.d/*.conf/etc/nginx/sites-enabled/*

การกำหนดค่า nginx เริ่มต้นมีคำสั่งนี้สำหรับการบันทึกการเข้าถึงบันทึก

access_log /var/log/nginx/access.log;

ฉันต้องการเพิ่มส่วนหัว X-Forwarded-For ดังนั้นฉันจะทำสิ่งนี้ภายในconf.dโฟลเดอร์:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                 '$status $body_bytes_sent "$http_referer" '
                 '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

ปัญหาที่ฉันมีคือเมื่อนั้นฉันจะได้รับสองระเบียนภายในไฟล์ access.log ของฉัน - หนึ่งที่มีข้อมูลส่วนหัวและอีกรายการหนึ่งที่ไม่มี

ฉันรู้ว่าฉันสามารถเขียนทับnginx.confไฟล์ตัวเอง แต่ฉันควรหลีกเลี่ยงถ้าเป็นไปได้ ฉันต้องการใช้แฟ้มบันทึกเดียวกันต่อไป ( access.log)

มีวิธีบอก nginx เพื่อแทนที่คำสั่งก่อนหน้าและเพียงแค่เปลี่ยนรูปแบบการบันทึกโดยไม่ต้องแก้ไขnginx.confไฟล์หลักหรือไม่


Nope เพียงลบออกจาก nginx.conf
Alexey Ten

1
ฉันเปิดตั๋วสำหรับสิ่งนี้ trac.nginx.org/nginx/ticket/1084
cweiske

คำตอบ:


4

คำตอบสำหรับคำถามของคุณคือไม่คุณไม่สามารถแทนที่ log_format ที่ระดับใดก็ได้ใน nginx และคุณไม่สามารถแทนที่ access_log เมื่ออยู่ในระดับเดียวกันยกเว้นการปิด อย่างไรก็ตามคุณสามารถบรรลุสิ่งที่คุณต้องการโดยไม่ต้องเปลี่ยน nginx.conf แต่คุณจะต้องทำที่ระดับเซิร์ฟเวอร์ {}

ปัญหาที่นี่คือที่รวมของ conf.d / * อยู่ใน http {} ซึ่งเป็นสิ่งที่เป็นคำสั่ง access_log สิ่งที่คุณสามารถทำได้โดยไม่ต้องแตะ nginx.conf คือการเปลี่ยนเซิร์ฟเวอร์ใดก็ตามที่คุณใช้ {} (หากคุณไม่ได้ตั้งค่าไว้คุณจะใช้ค่าเริ่มต้นที่ / etc / nginx / sites-enabled / default) ดังนั้นเพื่อให้บรรลุเหมือนกันโดยไม่เปลี่ยน nginx.conf คุณควรเปลี่ยนไฟล์ของคุณในโฟลเดอร์ conf.d เป็น: log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log off;

แล้วภายในเซิร์ฟเวอร์ของคุณ {} ใส่: access_log /var/log/nginx/access.log main;

คุณควรได้สิ่งที่คุณต้องการในตอนแรก


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