ओवरगाइडिंग 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.