आप एक छोटी सी चाल कर सकते हैं। यदि यह मान प्रत्येक server
ब्लॉक से http
ब्लॉक में पहुंच योग्य होना चाहिए तो आप map
निर्देश का उपयोग कर सकते हैं। ऐसे कैसे चलेगा?
map
निर्देश आपको http
ब्लॉक में कहीं भी एक चर का उपयोग करने की अनुमति देता है, जिसकी कीमत कुछ मानचित्र कुंजी पर गणना की जाएगी। सभी बताई गई उदाहरण:
http {
...
/*
value for your $my_everywhere_used_variable will be calculated
each time when you use it and it will be based on the value of $query_string.
*/
map $query_string $my_everywhere_used_variable {
/*
if the actual value of $query_string exactly match this below then
$my_everywhere_used_variable will have a value of 3
*/
/x=1&y=2&opr=plus 3;
/*
if the actual value of $query_string exactly match this below then
$my_everywhere_used_variable will have a value of 4
*/
/x=1&y=4&opr=multi 4;
/*
it needs to be said that $my_everywhere_used_variable's value is calculated each
time you use it. When you use it as pattern in a map directive (here we used the
$query_string variable) some variable which will occasionally change
(for example $args) you can get more flexible values based on specific conditions
*/
}
// now in server you can use this variable as you want, for example:
server {
location/{
rewrite .* /location_number/$my_everywhere_used_variable;
/*
the value to set here as $my_everywhere_used_variable will be
calculated from the map directive based on $query_string value
*/
}
}
}
तो अब, आपके लिए इसका क्या अर्थ है? आप इस सरल चाल के साथ सभी server
ब्लॉक के लिए वैश्विक चर सेट करने के लिए map
निर्देश का उपयोग कर सकते हैं। आप अपने मानचित्र मान के लिए डिफ़ॉल्ट मान सेट करने के लिए default
कीवर्ड का उपयोग कर सकते हैं। इस सरल उदाहरण में दिखाया गया:
map $host $my_variable {
default lalalala;
}
इस उदाहरण में हम $host
मूल्य पर $my_variable
के मान की गणना, लेकिन वास्तव में यह कोई बात नहीं क्या $host
है कि हम हमेशा के लिए मूल्य के रूप में lalalala सेट हो जाएगा डिफ़ॉल्ट रूप से और अन्य विकल्पों के बिना हमारे चर। अब आप अपने कोड में हर जगह जब आप (set
निर्देश के साथ बनाया उदाहरण के लिए) अन्य सभी उपलब्ध चर के रूप में एक ही तरीके से $my_variable
का उपयोग करेगा आप lalalala
का मूल्य प्राप्त होगा और क्यों बस set
निर्देशों का उपयोग से बेहतर है ? क्योंकि set
निर्देश, जैसा कि दस्तावेज़ कहता है nginx set directive केवल server, location and if
ब्लॉक के अंदर पहुंच योग्य है, इसलिए इसका उपयोग server
ब्लॉक के लिए वैश्विक चर बनाने के लिए नहीं किया जा सकता है।
डॉक्स map
के बारे में निर्देश यहां उपलब्ध हैं: map directive
कुछ भी सर्वर में सेट {} ब्लॉक विरासत में मिला है। –
आपका मतलब है कि अगर मैं पहले सर्वर में एक var परिभाषित करता हूं, तो मैं इसे नीचे के सभी सर्वर ब्लॉक में उपयोग कर सकता हूं? – sinory