सवाल Nginx के लिए conf.d निर्देशिका बनाम साइट्स के लिए अलग-अलग उपयोग क्या हैं


मुझे लिनक्स का उपयोग करके कुछ अनुभव है लेकिन कोई भी nginx का उपयोग नहीं कर रहा है। मुझे एप्लिकेशन सर्वर के लिए लोड-बैलेंसिंग विकल्पों का शोध करने का काम सौंपा गया है।

मैंने nginx स्थापित करने के लिए apt-get का उपयोग किया है और सब ठीक लगता है।

मेरे पास दो सवाल है।

साइट-उपलब्ध फ़ोल्डर और conf.d फ़ोल्डर के बीच क्या अंतर है। उन दोनों फ़ोल्डर्स को nginx के लिए डिफ़ॉल्ट कॉन्फ़िगरेशन सेटअप में शामिल किया गया था। ट्यूटोरियल दोनों का उपयोग करें। वे क्या हैं और सबसे अच्छा अभ्यास क्या है?

साइट-सक्षम फ़ोल्डर के लिए क्या उपयोग किया जाता है? मैं इसे कैसे इस्तेमाल करूं?

डिफ़ॉल्ट कॉन्फ़िगरेशन एक www-data उपयोगकर्ता का संदर्भ देता है? क्या मुझे उस उपयोगकर्ता को बनाना है? मैं nginx चलाने के लिए उस उपयोगकर्ता को इष्टतम अनुमति कैसे दे सकता हूं?


73
2017-07-31 14:20


मूल


एक प्रश्न पूछते समय दायरे रेंगने से बचने की कोशिश करें; www-data एक अलग विषय है। अधिकांश ऑपरेटिंग सिस्टम एक अलग उपयोगकर्ता को निचले अनुमतियों के साथ परिभाषित करते हैं जो प्रक्रिया को पोर्ट 80 के रूप में रूट के रूप में बाध्य करने के बाद चलाया जा सकता है। यह कॉन्फ़िगरेशन फ़ाइल में परिभाषित किया गया है। वहां से बुनियादी सुरक्षा प्रथाओं को लागू करें; उपयोगकर्ता को कुछ भी लिखने की अनुमति न दें जिसे वेबसर्वर को लिखने की आवश्यकता नहीं है, अन्य उपयोगकर्ताओं को फाइलों को तब तक लिखने की अनुमति न दें जब तक यह जानबूझकर न हो। - Andrew B


जवाब:


साइट- * फ़ोल्डर द्वारा प्रबंधित किया जाता है nginx_ensite तथा nginx_dissite। Apache httpd उपयोगकर्ताओं के लिए जो इसे खोज के साथ पाते हैं, समकक्ष है a2ensite/a2dissite

sites-available फ़ोल्डर भंडारण के लिए है सब आपके vhost विन्यास के, चाहे वे वर्तमान में सक्षम हैं या नहीं।

sites-enabled फ़ोल्डर में साइट-उपलब्ध फ़ोल्डर में फ़ाइलों के लिए सिम्लिंक शामिल हैं। यह आपको symlink को हटाकर चुनिंदा रूप से vhosts को अक्षम करने की अनुमति देता है।

conf.d नौकरी करता है, लेकिन आपको फ़ोल्डर से कुछ बाहर ले जाना है, इसे हटा देना है, या जब आपको कुछ अक्षम करने की आवश्यकता होती है तो इसमें बदलाव करना पड़ता है। साइट- * फ़ोल्डर अबास्ट्रक्शन चीजों को थोड़ा और व्यवस्थित बनाता है और आपको अलग समर्थन स्क्रिप्ट के साथ प्रबंधित करने की अनुमति देता है।

(जब तक कि आप मेरे जैसे नहीं होते, और कई डेबियन प्रशासकों में से एक जिन्होंने सिम्लिंक को सीधे प्रबंधित किया, स्क्रिप्ट के बारे में नहीं जानते ...)


69
2017-07-31 15:01



क्या मुझे कुछ गलत मिला? डाउनवोट समझ में नहीं आता है। - Andrew B
मुझे उत्सुकता है कि यह nginx में बनाया गया है? मैं मैन्युअल रूप से स्थापित किया github.com/perusio/nginx_ensite - lfender6445
यह ध्यान रखना महत्वपूर्ण है sites-available|sites-enabled एक डेबियन-आईएसएम है और ऐसा कुछ नहीं है जो nginx या अपाचे करता है। यह अतीत में काफी उपयोगी था, लेकिन इसकी उपयोगिता कुछ हद तक कॉन्फ़िगरेशन प्रबंधन और कंटेनर की आयु में सीमित है। - Michael Hampton♦


मैं पिछले उत्तरों में जोड़ना चाहता हूं कि सबसे महत्वपूर्ण यह नहीं है कि आप निर्देशिकाओं को कैसे कॉल करते हैं (हालांकि यह एक बहुत ही उपयोगी सम्मेलन है), लेकिन जो आपने वास्तव में रखा है nginx.conf। उदाहरण विन्यास:

http {
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*.conf;
    include /etc/nginx/sites-enabled/my_own_conf;
...
}

यहां इस्तेमाल किया जाने वाला एकमात्र निर्देश है शामिल, इसलिए उदाहरण के बीच कोई आंतरिक अंतर नहीं है conf.d/ तथा sites-enabled/

उपरोक्त दस्तावेज से:

Syntax:     include file | mask;
Default:    —
Context:    any

Includes another file, or files matching the specified mask, 
into configuration. Included files should consist of 
syntactically correct directives and blocks.

तो, मूल प्रश्न का उत्तर देने के लिए: कोई आंतरिक अंतर नहीं है, और आप अन्य उत्तरों से सलाह याद रखने के लिए उन्हें सबसे अच्छे तरीके से उपयोग कर सकते हैं। और कृपया, 'दाएं' उत्तर चुनना न भूलें।


28
2018-04-16 20:29



सही, sites-enabled कुछ हद तक आविष्कार किया गया है, जो एक परेशान मध्यवर्ती के रूप में चारों ओर फजी है। जाओ nginx पकड़ो आधिकारिक स्रोत: आपको एक अद्यतित उत्पाद मिल जाएगा, साथ ही साथ इस कॉन्फ़िगरेशन बकवास / नरक से छुटकारा पड़ेगा। - Bernard Rosset
यह बताता है कि आधिकारिक Nginx दस्तावेज पर इस नाम सम्मेलन का एक भी संदर्भ क्यों नहीं है। यह एक तीसरी पार्टी परियोजना है! github.com/perusio/nginx_ensite - AxeEffect


आमतौर पर, sites-enabled वर्चुअल होस्ट परिभाषाओं के लिए फ़ोल्डर का उपयोग किया जाता है, जबकि conf.d वैश्विक सर्वर विन्यास के लिए प्रयोग किया जाता है। यदि आप एकाधिक वेबसाइटों का समर्थन कर रहे हैं - यानी वर्चुअल होस्ट - तो प्रत्येक व्यक्ति को अपनी फ़ाइल मिलती है, ताकि आप फ़ाइलों को अंदर और बाहर ले जाकर उन्हें आसानी से सक्षम और अक्षम कर सकें sites-enabled (या symlinks बनाना और निकालना, जो शायद एक बेहतर विचार है)।

उपयोग conf.d मॉड्यूल लोडिंग, लॉग फाइल, और अन्य चीजों जैसे चीजों के लिए जो एक वर्चुअल होस्ट के लिए विशिष्ट नहीं हैं।

डिफ़ॉल्ट कॉन्फ़िगरेशन एक www-data उपयोगकर्ता का संदर्भ देता है? क्या मुझे करना होगा   उस उपयोगकर्ता को बनाओ?

आपके पास nginx गैर-रूट उपयोगकर्ता के रूप में चलना चाहिए। यह कुछ मामलों में नामित है www-data, लेकिन आप इसे अपनी इच्छानुसार कुछ भी नाम दे सकते हैं।

मैं उस उपयोगकर्ता को इष्टतम अनुमतियाँ कैसे दे सकता हूं   nginx चल रहा है?

मुझे इस सवाल का जवाब कम नहीं है (मैं फिलहाल nginx नहीं चला रहा हूं), लेकिन अगर यह अपाचे की तरह कुछ है तो जवाब यह है कि www-data उपयोगकर्ता को केवल किसी भी स्थैतिक फ़ाइलों (और निर्देशिकाओं पर निष्पादित + निष्पादित) को पढ़ने की अनुमति की आवश्यकता होती है, जिन्हें आप सेवा दे रहे हैं, या सीजीआई स्क्रिप्ट जैसी चीजों पर अनुमतियां पढ़ / निष्पादित करते हैं, और कहीं और अनुमति नहीं है।


25
2017-07-31 14:59



वैध सर्वर रिकॉर्ड को हटाकर इस उपयोगकर्ता के लिए लॉगिन क्षमता अक्षम करने के कारण वेब सर्वर चलाने के लिए समर्पित उपयोगकर्ता भी महत्वपूर्ण है। - DukeLion
> 'आपको nginx को गैर-मूल उपयोगकर्ता के रूप में चलाना चाहिए' - क्या आप इसके बारे में अधिक जानकारी दे सकते हैं? - lfender6445
एक अप्रतिबंधित उपयोगकर्ता के रूप में चलना एक समझौता करने का एक तरीका है जो रिमोट समझौता के परिणामस्वरूप हो सकता है। यदि आप एक वेबसर्वर के रूप में चल रहे हैं root और कुछ प्रकार के रिमोट समझौता है, हमलावर के पास तुरंत सिस्टम तक पूर्ण पहुंच है। एक अप्रतिबंधित उपयोगकर्ता के रूप में चलते समय, प्रशासनिक पहुंच केवल कुछ प्रकार के स्थानीय शोषण के साथ संयोजन में उपलब्ध होगी। - larsks


क्या चल रहा है?

आप डेबियन या उबंटू का उपयोग कर रहे हैं, क्योंकि बुराई  sites-available / sites-enabled तर्क का उपयोग नहीं किया जाता है nginx की अपस्ट्रीम पैकेजिंग से http://nginx.org/packages/

किसी भी मामले में, दोनों मानक की मदद से कॉन्फ़िगरेशन सम्मेलन के रूप में लागू किए जाते हैं include में निर्देश /etc/nginx/nginx.conf

यहां एक स्निपेट है /etc/nginx/nginx.conf nginx.org से nginx के एक आधिकारिक अपस्ट्रीम पैकेज से:

http {
    …
    include /etc/nginx/conf.d/*.conf;
}

यहां एक स्निपेट है /etc/nginx/nginx.conf डेबियन / उबंटू से:

http {
    …
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

तो, एनजीआईएनएक्स के दृष्टिकोण से, केवल अंतर ही फाइलें होगी conf.d जल्द से जल्द संसाधित हो जाएं, और, जैसे, यदि आपके पास कॉन्फ़िगरेशन हैं जो चुपचाप एक दूसरे के साथ संघर्ष करते हैं, तो उनमें से conf.d उन पर प्राथमिकता ले सकते हैं sites-enabled


सर्वश्रेष्ठ अभ्यास है conf.d

आप का उपयोग करना चाहिए /etc/nginx/conf.d, क्योंकि यह एक मानक सम्मेलन है, और कहीं भी काम करना चाहिए।

यदि आपको किसी साइट को अक्षम करने की आवश्यकता है, तो फ़ाइल नाम का नाम बदलने के लिए अब कोई नाम नहीं है .conf प्रत्यय, बहुत आसान, सीधा और त्रुटि-सबूत:

sudo mv -i /etc/nginx/conf.d/default.conf{,.off}

या इसके विपरीत सक्षम एक जगह:

sudo mv -i /etc/nginx/conf.d/example.com.conf{.disabled,}


से बचें sites-available और sites-enabled किसी भी कीमत पर।

मैं बिल्कुल उपयोग करने का कोई कारण नहीं देखता हूं sites-available / sites-enabled:

  • कुछ लोगों ने उल्लेख किया है nginx_ensite तथा nginx_dissite स्क्रिप्ट्स - इन स्क्रिप्ट के नाम इस हार के बाकी हिस्सों से भी बदतर हैं - लेकिन ये स्क्रिप्ट भी कहीं भी नहीं मिलती हैं - वे अनुपस्थित हैं nginx डेबियन (और शायद उबंटू में भी) में पैकेज भी, और अपने स्वयं के पैकेज में मौजूद नहीं है, प्लस, क्या आपको वास्तव में फ़ाइलों को स्थानांतरित करने और / या फ़ाइलों को जोड़ने के लिए वास्तव में एक संपूर्ण गैर-मानक तृतीय-पक्ष स्क्रिप्ट की आवश्यकता है दो निर्देशिका ?!

  • और यदि आप स्क्रिप्ट का उपयोग नहीं कर रहे हैं (जो वास्तव में, ऊपर के अनुसार एक स्मार्ट पसंद है), तो साइट्स का प्रबंधन करने का मुद्दा आता है:

    • क्या आप से प्रतीकात्मक लिंक बनाते हैं sites-available सेवा मेरे sites-enabled?
    • फाइल कॉपी करें?
    • फाइलों को ले जाएं?
    • जगह में फ़ाइलों को संपादित करें sites-enabled?

उपरोक्त कुछ मामूली मुद्दों की तरह लग सकता है, जब तक कि कई लोग सिस्टम का प्रबंधन शुरू नहीं करते हैं, या जब तक आप एक त्वरित निर्णय नहीं ले लेते हैं, केवल महीनों या वर्षों के बारे में भूल जाते हैं ...

जो हमें लाता है:

  • क्या फ़ाइल से निकालना सुरक्षित है sites-enabled? क्या यह नरम लिंक है? एक कठिन लिंक? या विन्यास की एकमात्र प्रति? विन्यास नरक का एक प्रमुख उदाहरण।

  • कौन सी साइटें अक्षम कर दी गई हैं? (साथ में conf.d, बस उन फ़ाइलों के लिए एक उलटा खोज करें जो समाप्त नहीं हो रहे हैं .conf - find /etc/nginx/conf.d -not -name "*.conf", या उपयोग करें grep -v।)

न केवल उपरोक्त सभी, बल्कि विशिष्ट भी ध्यान दें include डेबियन / उबंटू द्वारा निर्देशित निर्देश - /etc/nginx/sites-enabled/*- के लिए कोई फ़ाइल नाम प्रत्यय निर्दिष्ट नहीं है sites-enabledके विपरीत, conf.d

  • इसका अर्थ यह है कि यदि एक दिन आप जल्दी से फ़ाइल या दो को संपादित करने का निर्णय लेते हैं /etc/nginx/sites-enabled, और आपका emacs जैसे बैकअप फ़ाइल बनाता है default~, फिर, अचानक, आपके पास दोनों हैं default तथा default~ सक्रिय कॉन्फ़िगरेशन के रूप में शामिल किया गया है, जो कि इस्तेमाल किए गए निर्देशों के आधार पर आपको कोई चेतावनी भी नहीं दे सकता है, और लंबे समय तक डिबगिंग सत्र होने का कारण बनता है। (हाँ, यह मेरे साथ हुआ; यह एक हैकथॉन के दौरान था, और मैं पूरी तरह से परेशान था कि मेरा conf क्यों काम नहीं कर रहा था।)

इस प्रकार, मुझे विश्वास है कि sites-enabled शुद्ध बुराई है!


6
2017-08-27 20:08



उपरोक्त सभी के अलावा, जाहिर है, गलत सिम्लिंक बनाने के लिए भी बहुत आम है! stackoverflow.com/a/14107803/1122270  बस अगर आपको नहीं लगता था sites-enabled काफी बुरा था! - cnst
या, कभी-कभी, ऐसा हो सकता है कि कोई भी फाइलों को संपादित करने का निर्णय लेता है sites-enabled, फिर भी एक और व्यक्ति इसे हटाने से इसे अक्षम करने का फैसला करता है, संभवतः यह सोच रहा है कि यह केवल एक सिम्लिंक था, जिसके लिए conf फ़ाइल को पुनर्प्राप्त करने के लिए nginx ढेर के बाद की स्मृति डंप की आवश्यकता होती है: stackoverflow.com/q/45852224/1122270 - cnst
मुझे इस बारे में कथनों से असहमत होना है sites-available तथा sites-enabled; 'लाइव' पिकअप निर्देशिका के बाहर कॉन्फ़िगरेशन फ़ाइलों को तैयार करने में सक्षम होना महत्वपूर्ण है, जैसे कि अगर nginx को पुनः लोड किया गया या पुनरारंभ किया गया कि यह आंशिक कॉन्फ़िगरेशन फ़ाइलों को नहीं उठाएगा। यह कॉन्फ़िगरेशन फ़ाइलों को रखने के लिए भी उपयोगी हो सकता है जो अब सक्रिय उपयोग में नहीं हैं। सिम्लिंक बनाना एक विशेष रूप से कठिन कार्य नहीं है यदि आपके पास पहले स्थान पर आईजीओ का प्रबंधन करने के लिए पर्याप्त अनुभव है। - BE77Y
@ BE77Y आप एक और जटिल दृष्टिकोण ले रहे हैं। प्रोग्रामिंग में, इसे अप्रयुक्त कोड को पूरी तरह से निकालने के लिए सबसे अच्छा अभ्यास माना जाता है, न केवल इसे अक्षम या टिप्पणी करें; मुझे कोई कारण नहीं दिखता कि DevOps को अलग क्यों होना चाहिए - यदि किसी कॉन्फ़िगर की आवश्यकता नहीं है, तो इसे हटाएं (यह अभी भी आपके वीसीएस में मौजूद होना चाहिए)। आंशिक conf फ़ाइलों के साथ ही - आप उन्हें सक्षम क्यों संपादित करेंगे और आपकी पीठ के पीछे nginx पुनः लोड हो जाएगा? (USR1, जो लॉग को फिर से खोलता है, conf को पुनः लोड नहीं करता है।) मुझे आपकी सिम्लिंक "अनुभव" टिप्पणियां गलत दिशा-निर्देश मिलती हैं - समस्या स्थिरता का विषय है, जिसका अनुभव अनुभव से बहुत कम है। - cnst
यह स्पष्ट है कि ए) यह इस चर्चा के लिए उचित माध्यम नहीं है और शायद इससे भी महत्वपूर्ण बात यह है कि बी) किसी भी मामले में यह निष्फल होने की संभावना है। और कोई बहस नहीं चाहिए। - BE77Y