ओवरगाइडिंग nginx access_log निर्देश - डुप्लिकेट लॉग प्रविष्टियों


17

मैं Ubuntu 14.04 सर्वर पर डिफ़ॉल्ट नगनेक्स पैकेज का उपयोग कर रहा हूं। यह उपयोग कर रहा है /etc/nginx/nginx.confमुख्य config के रूप में, और उसके बाद से कॉन्फ़िगरेशन शामिल /etc/nginx/conf.d/*.confऔर /etc/nginx/sites-enabled/*

डिफ़ॉल्ट नगनेक्स कॉन्फिगर में एक्सेस लॉग में लॉगिंग के लिए यह निर्देश है

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

मैं X- फ़ॉर्वर्ड-फॉर हेडर जोड़ना चाहूंगा, इसलिए मैं 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.confफ़ाइल को संशोधित किए बिना बस लॉग प्रारूप को बदलने का एक तरीका है ?


नहीं। बस इसे nginx.conf से हटा दें
एलेक्सी टेन

1
मैंने इसके लिए एक टिकट खोला है; trac.nginx.org/nginx/ticket/1084
cweiske

जवाबों:


6

आपके प्रश्न का उत्तर NO है, आप किसी भी स्तर पर एक लॉग_फॉर्म को nginx में ओवरराइड नहीं कर सकते हैं और जब आप इसे बंद कर रहे हैं, तो उसी स्तर में access_log को ओवरराइड नहीं कर सकते। हालाँकि, आप nginx.conf को बदले बिना जो चाहें प्राप्त कर सकते हैं लेकिन आपको इसे सर्वर {} के स्तर पर करना होगा।

यहाँ मुद्दा यह है कि conf.d / * का समावेश http {} के अंदर है, जो कि एक्सेस_लॉग डायरेक्टिव है। Nginx.conf को छूने के बिना आप जो भी कर सकते हैं वह है कि आप जो भी सर्वर {} का उपयोग कर रहे हैं (यदि आपने सेटअप नहीं किया है तो आप / a / nginx / sites-enable / 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;

आपको वह मिलना चाहिए जो आप शुरुआत में चाहते थे।


धन्यवाद, यह बहुत अच्छा काम करता है। सिवाय इसके कि आमतौर पर पहले से ही एक mainलॉग_फॉर्म है, ताकि आपको दूसरा नाम चुनने की आवश्यकता हो।
कुटज़ी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.