सवाल नेस्टेड स्थानों nginx


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

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 {
        }
}

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


47
2018-04-05 07:09


मूल


उन्हें समूह क्यों? क्यों न केवल KISS? - pkhamre
forum.nginx.org/read.php?2,174517,174534#msg-174534 - pkhamre
क्योंकि तार्किक रूप से वे समूहित होते हैं - Jayen
यह मुझे समझने में काफी समय लगा लेकिन अंत में मैं एक सरल (आईएसएच) बनाने में सक्षम था स्थानों को कैसे चुना जाता है इसकी प्राथमिकता सूची। - artfulrobot


जवाब:


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

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

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 {
        ...
        }
}

80
2017-09-09 15:00



मैं आपकी पहली वाक्य से उलझन में आया, लेकिन आपके उदाहरण समझ में आ गए। मैं पिछले उदाहरण, उपसर्ग स्थान में मानता हूं /b एक त्रुटि फेंक देंगे? - Jayen
वह पहला वाक्य होना चाहिए प्रलेखन। - AndreKR
पहले उदाहरण में, यदि आप बाहर निकलते हैं location /a { } बॉयलरप्लेट - ऑर्डर मायने रखता है? - Meekohi
आह कभी नहीं मुझे गलत समझा। घोंसले वाले स्थानों को उनके मूल स्थानों से कुछ भी प्राप्त नहीं होता है। - Meekohi
अभिभावक स्थान एक गैर रेगेक्स स्थान हो सकता है लेकिन माता-पिता के भीतर किसी भी घोंसले वाले स्थान को सभी को regex / non regex होना चाहिए। - MitchellK