নেস্টেড অবস্থানগুলি


60

এনজিএনএক্সে নেস্টেড অবস্থানগুলি বুঝতে আমার সমস্যা হচ্ছে। আমার দুটি কনফিগারেশন নির্দেশাবলী সাধারণ রয়েছে, সুতরাং নির্দেশগুলি পুনরাবৃত্তি করার পরিবর্তে আমি নিয়মিত-এক্সপ্রেশন ব্যবহার করে ইউআরআই পুনরাবৃত্তি করতে পছন্দ করি:

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
কারণ যৌক্তিকভাবে তারা গোষ্ঠীযুক্ত
জেইন

এটি বুঝতে আমাকে দীর্ঘ সময় লেগেছে তবে শেষ পর্যন্ত আমি কীভাবে অবস্থানগুলি চয়ন করা হয় তার একটি সহজ (ইশ) অগ্রাধিকার তালিকা তৈরি করতে সক্ষম হয়েছি ।
আর্টফুল্রবট

উত্তর:


101

পুরানো প্রশ্ন, তবে বিষয়টি হ'ল পিতৃস্থানীয় অবস্থানটি একটি রেজেক্স অবস্থান যখন নেস্টেড অবস্থানগুলি উপসর্গের অবস্থান।

আপনি কেবল নেস্টেড উপসর্গের অবস্থানগুলি সংজ্ঞায়িত করতে পারেন যখন পিতামাতার অবস্থানটি একটি উপসর্গের অবস্থান হয়:

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
প্রথম বাক্যটি ডকুমেন্টেশনে থাকা উচিত ।
AndreKR

1
প্রথম উদাহরণে, আপনি যদি location /a { }বয়লারপ্লেটটি ছেড়ে দেন - অর্ডারটি কী ব্যাপার?
মেকোহি

2
আহ কিছু নয় আমি ভুল বুঝেছি। নেস্টেড অবস্থানগুলি তাদের পিতামাতার অবস্থানগুলি থেকে কোনও কিছুর উত্তরাধিকারী হয় না।
মেকোহি

প্যারেন্টের অবস্থানটি কোনও রেইজেক্স অবস্থান হতে পারে তবে পিতামাতার মধ্যে যে কোনও একাধিক নেস্টেড অবস্থানগুলি সবগুলিই হয় রেজেক্স / নন রেজেক্স হতে হবে।
মিচেলকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.