नेस्टेड स्थान nginx


60

मुझे नेगनेक्स में नेस्टेड स्थानों को समझने में परेशानी हो रही है। मेरे पास कुछ कॉन्फ़िगरेशन निर्देशों के साथ दो स्थान सामान्य हैं, इसलिए निर्देशों को दोहराने के बजाय, मैं एक नियमित अभिव्यक्ति का उपयोग करके URI को दोहराना पसंद करूंगा:

location ~ /a|/b {
        location /a {
        }
        location /b {
        }
}

हालाँकि, यह त्रुटि देता है

nginx: [emerg] location "/a" is outside location "/a|/b" in /etc/nginx/nginx.conf:36

बिना या |यह ठीक लगता है, हालांकि।

location ~ /a {
        location /a {
        }
}

मैं क्या गलत कर रहा हूं? क्या कुछ भी दोहराए बिना ऐसा करने का एक बेहतर तरीका है? क्या मैं दूसरे तरीके से समूह बना सकता हूं?


1
उन्हें क्यों समूह? क्यों सिर्फ चुंबन नहीं?
pkhamre


6
क्योंकि तार्किक रूप से उन्हें समूहबद्ध किया गया है
Jayen

यह समझने में मुझे लंबा समय लगा लेकिन अंत में मैं एक साधारण (ish) प्राथमिकता सूची बनाने में सक्षम हुआ कि स्थान कैसे चुने जाते हैं
Artfulrobot

जवाबों:


100

पुराना सवाल है, लेकिन मुद्दा यह है क्योंकि मूल स्थान एक रेगेक्स स्थान है जबकि नेस्टेड स्थान उपसर्ग स्थान हैं।

जब मूल स्थान भी उपसर्ग स्थान हो तो आप केवल नेस्टेड उपसर्ग स्थानों को परिभाषित कर सकते हैं:

location /a {
        location /a {
               # You can also skip this location and just write
               # your code directly under the parent location
        }
        location /a/b {
        ...
        }
}

जब एक पैरेंट लोकेशन को रेगेक्स द्वारा परिभाषित किया जाता है, तो किसी नेस्टेड स्थानों को भी रेग्जेस द्वारा परिभाषित किया जाना चाहिए:

location ~ ^/(a|b) {
        location ~ ^/a {
        ...
        }
        location ~ ^/b {
        ...
        }
}

हालाँकि, आप तब भी नेस्टेड रेगेक्स स्थानों को परिभाषित कर सकते हैं जब मूल स्थान एक उपसर्ग स्थान हो:

location /a/b {
        location ~ /a {
        ...
        }
        location ~ /b {
        ...
        }
}

मैं आपके पहले वाक्य से भ्रमित हो गया, लेकिन आपके उदाहरणों से समझ में आता है। मैं पिछले उदाहरण में मानता हूं, उपसर्ग स्थान /bएक त्रुटि फेंक देगा?
जयन

13
वह पहला वाक्य प्रलेखन में होना चाहिए ।
आंद्रेकआर

1
पहले उदाहरण में, यदि आप location /a { }बॉयलरप्लेट बाहर छोड़ते हैं - क्या ऑर्डर मायने रखता है?
मियोकी

2
आह मैं गलत नहीं समझा। नेस्टेड स्थान उनके मूल स्थानों से कुछ भी वारिस नहीं करते हैं।
मियोकी

मूल स्थान एक नॉन रेगेक्स स्थान हो सकता है, लेकिन माता-पिता के भीतर किसी भी कई नेस्टेड स्थानों को या तो रेगेक्स / नॉन रेक्सक्स होना चाहिए।
मिशेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.