2013-01-21 19 views
20

Nginx conf dosyasında genel değişken nasıl tanımlanır, http bloğunda genel bir var tanımlar ve aşağıdaki tüm sunucular ve konumlar bunu kullanabilir.nginx conf dosyasında global değişken nasıl tanımlanır

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

şey {} bloğu kalıtsaldır. İlk sunucudaki bir var tanımlarsanız –

+0

Daha sonra ben altındaki tüm sunucu bloklarda kullanabilirsiniz ki? – sinory

cevap

58

Küçük bir numara yapabilirsiniz. Bu değer bir http blokta her server bloktan erişilebilir olmalıdır Eğer map direktifini kullanabilirsiniz. Bu nasıl çalışır?
map yönergesi bazı harita tuş üzerinde hesaplanacaktır değeri http blokta yerde bir değişken kullanmasını sağlar. Tüm anlatım örnekleri:

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 
     */ 
    } 
    } 
} 

Şimdi, bu sizin için ne anlama geliyor? Bu basit hile ile bütün server bloklar için global değişkeni ayarlamak için map direktifini kullanabilirsiniz. Eğer haritası değeri için varsayılan bir değer ayarlamak için default anahtar sözcüğünü kullanabilirsiniz. Bu basit örnekte olduğu gibi: Bu örnekte

map $host $my_variable { 
    default lalalala; 
} 

biz $host değerine $my_variable değerini hesaplamak, ama aslında her zaman için değer olarak lalalala koyacaktır çünkü $host ne olduğunu fark etmez değişkeni varsayılan olarak ve başka seçenekler olmadan. Şimdi her yerde kodunuzda Eğer (set yönergesi ile oluşturulan örneğin) tüm mevcut diğer değişkenler aynı şekilde $my_variable kullanacağı zaman lalalala

değerini alacak Ve neden sadece set yönergesini kullanarak daha iyi budur ? set yönergesi, belgenin nginx set directive bildirdiği gibi yalnızca server, location and if blokları içinde erişilebilir olduğundan, bu nedenle server blokları için global değişken oluşturmak için kullanılamaz.

Dokümanlar yaklaşık map direktif burada mevcuttur: sunucusunda ayarlanan map directive

+0

güzel! Harita direktifini kullanarak global değişkenin üzerine yazabilir miyim? – confiq

+13

Bu cevap hala kabul edilmiyor mu? –

+0

Herhangi bir fikir Lua bloğundaki $ my_everywhere_used_variable öğesine nasıl erişilir? – Sreeraj

İlgili konular