रेगेक्स और शामिल दोनों फाइलें अच्छे तरीके हैं, और मैं अक्सर उन का उपयोग करता हूं। लेकिन एक अन्य विकल्प "नामित स्थान" का उपयोग करना है, जो कई स्थितियों में एक उपयोगी दृष्टिकोण है - विशेष रूप से अधिक जटिल वाले। आधिकारिक पृष्ठ "अगर बुराई है" शो अनिवार्य रूप से एक अच्छा तरीका है काम करने के लिए के रूप में निम्नलिखित:
error_page 418 = @common_location;
location /first/location/ {
return 418;
}
location /second/location/ {
return 418;
}
location @common_location {
# The common configuration...
}
इन विभिन्न दृष्टिकोणों के फायदे और नुकसान हैं। एक regex के लिए एक बड़ा फायदा यह है कि आप मैच के कुछ हिस्सों पर कब्जा कर सकते हैं और प्रतिक्रिया को संशोधित करने के लिए उनका उपयोग कर सकते हैं। बेशक, आप आमतौर पर मूल ब्लॉक में चर सेट करके या उपयोग करके अन्य दृष्टिकोणों के साथ समान परिणाम प्राप्त कर सकते हैं map
। रेगेक्स दृष्टिकोण का नकारात्मक पक्ष यह है कि यदि आप विभिन्न स्थानों से मेल खाना चाहते हैं, तो यह बहुत कम हो सकता है, और रेगेक्स की निम्न पूर्वता हो सकता है केवल उन स्थानों के साथ फिट नहीं हो सकती है जो आप स्थानों से मेल खाना चाहते हैं - यह उल्लेख नहीं करना कि स्पष्ट रूप से प्रदर्शन प्रभाव हैं कुछ मामलों में regexes से।
फ़ाइलों को शामिल करने का मुख्य लाभ (जहां तक मैं बता सकता हूं) यह है कि यह वास्तव में आप क्या शामिल कर सकते हैं के बारे में थोड़ा अधिक लचीला है - उदाहरण के लिए, इसे पूर्ण स्थान ब्लॉक नहीं होना चाहिए। लेकिन यह भी नामित स्थानों की तुलना में सिर्फ विषयगत रूप से थोड़ा अव्यवस्थित है।
यह भी ध्यान दें कि एक संबंधित समाधान है जिसे आप समान स्थितियों में उपयोग करने में सक्षम हो सकते हैं: नेस्टेड स्थान। विचार यह है कि आप एक बहुत ही सामान्य स्थान से शुरू करेंगे, कई संभावित मैचों के लिए कुछ कॉन्फ़िगरेशन को सामान्य रूप से लागू करेंगे, और फिर विभिन्न प्रकार के पथों के लिए अलग-अलग नेस्टेड स्थान हैं जिन्हें आप मिलान करना चाहते हैं। उदाहरण के लिए, ऐसा कुछ करना उपयोगी हो सकता है:
location /specialpages/ {
# some config
location /specialpages/static/ {
try_files $uri $uri/ =404;
}
location /specialpages/dynamic/ {
proxy_pass http://127.0.0.1;
}
}