2013-01-21 12 views
20

nginx conf फ़ाइल में वैश्विक चर को परिभाषित करने के लिए, http ब्लॉक में एक वैश्विक var परिभाषित करें, और नीचे दिए गए सभी सर्वर और स्थान इसका उपयोग कर सकते हैं।nginx conf file में वैश्विक चर को परिभाषित करने के लिए कैसे करें

http{ 
     some confs 
     ... 
     //define a global var mabe like 
     set APP_ROOT /home/admin 
     // and it can be use in all servers and locations below, like 
     server { 
     root $APP_ROOT/test1 
     } 

     server { 
     root $APP_ROOT/test2 
     } 
    } 
+0

कुछ भी सर्वर में सेट {} ब्लॉक विरासत में मिला है। –

+0

आपका मतलब है कि अगर मैं पहले सर्वर में एक var परिभाषित करता हूं, तो मैं इसे नीचे के सभी सर्वर ब्लॉक में उपयोग कर सकता हूं? – sinory

उत्तर

58

आप एक छोटी सी चाल कर सकते हैं। यदि यह मान प्रत्येक 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

+0

अच्छा! क्या मैं मानचित्र निर्देश का उपयोग कर वैश्विक चर को ओवरराइट कर सकता हूं? – confiq

+13

यह उत्तर अभी भी स्वीकार नहीं किया गया है? –

+0

लुआ ब्लॉक में $ my_everywhere_used_variable तक पहुंचने के लिए कोई विचार कैसे? – Sreeraj

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^