यह सुनिश्चित करने के लिए कि jpg / txt मैच के बजाय टेस्टडेयर मैच चुना गया है, निम्नलिखित स्थानों का उपयोग करें:
location ^~ /testdir {
deny all;
return 404;
}
location ~* ^.+\.(jpg|txt)$ {
root /var/www/site;
}
आपके उदाहरण में, आपके पास दो प्रकार के स्थान हैं। location /testdirएक उपसर्ग स्थान है, क्योंकि इसके ~बीच कोई टिल्ड ( ) नहीं है locationऔर /testdir।
location ~* ^.+\.(jpg|txt)$एक रेगेक्स स्थान (एक मामला-असंवेदनशील है, *सीधे टिल्ड के कारण)। से nginx प्रलेखन :
दिए गए अनुरोध के मिलान वाले स्थान को खोजने के लिए, nginx पहले उपसर्ग स्ट्रिंग्स (उपसर्ग स्थानों) का उपयोग करके परिभाषित स्थानों की जांच करता है। उनमें से, सबसे लंबे मिलान वाले उपसर्ग के साथ स्थान का चयन और याद किया जाता है। फिर कॉन्फ़िगरेशन फ़ाइल में उनकी उपस्थिति के क्रम में नियमित अभिव्यक्ति की जांच की जाती है। नियमित अभिव्यक्तियों की खोज पहले मैच पर समाप्त होती है, और संबंधित कॉन्फ़िगरेशन का उपयोग किया जाता है। यदि नियमित अभिव्यक्ति के साथ कोई मेल नहीं मिलता है, तो पहले याद किए गए उपसर्ग स्थान के कॉन्फ़िगरेशन का उपयोग किया जाता है।
यहाँ समस्या यह है कि आपके टेस्टडिर स्थान को याद किया जा रहा है, लेकिन फिर jpg / txt स्थान को रेगेक्स चरण के दौरान चुना जाता है, क्योंकि यह मेल खाता है। प्रलेखन से निम्नलिखित नोट मैं अपने समाधान पर आधारित है (ऊपर दिया गया है):
यदि सबसे लंबे मिलान वाले उपसर्ग स्थान में "^ ~" संशोधक है तो नियमित अभिव्यक्तियों की जाँच नहीं की जाती है।