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
şey {} bloğu kalıtsaldır. İlk sunucudaki bir var tanımlarsanız –
Daha sonra ben altındaki tüm sunucu bloklarda kullanabilirsiniz ki? – sinory