nginx konumunda değişken değişken


37

Nginx yapılandırmalarımı optimize etmeye çalışıyorum, bu nedenle bir değişken ayarlamak mümkün olacak ve tüm konum yolları otomatik olarak güncellenecekti. Söz konusu dört satır var:

server_name php.domain.com;
root /srv/web/vhosts/php/web;
error_log /srv/web/vhosts/php/logs/error.log;
access_log /srv/web/vhosts/php/logs/access.log;

Elde etmek istediğim şey bir değişken ayarlamak (bu durumda 'php') ve onu config dosyasına dahil etmektir.

set $variable "php";
server_name $variable.domain.com;
root /srv/web/vhosts/$variable/web;
error_log /srv/web/vhosts/$variable/logs/error.log;
access_log /srv/web/vhosts/$variable/logs/access.log;

Bununla birlikte, nginx'in bu yapılandırmadaki değişkenleri görmezden geldiğini belirtir. Yanlış bir şey mi yapıyorum yoksa değişken yer konumlarında kullanmak mümkün değil mi?

Yanıtlar:


58

Değişkenler hiçbir yerde bildirilemez ve herhangi bir yönergede kullanılamaz.

setDirektifin dokümantasyonu :

Syntax:   set $variable value;
Default:  —
Context:  server, location, if

Hemen sonuç, bir httpblokta özel değişkenleri kullanamamanızdır .

Güncelleme : Bu sohbet odasında AlexeyTen ile yaptığınız tartışma ve deneyimlerden sonra .

  • access_logkısıtlamalı değişkenler içerebilir. Bunlar arasında tamponlama eksikliği ve ana eğik çizginin bir değişkende bildirilmemesi gerektiği gerçeği .
  • error_log hiç değişkenlerle çalışmaz.
  • root yönerge değişkenleri içerebilir.
  • server_nameyönerge sadece $hostnamedeğişken benzeri bir not olarak katı değere izin verir .

1
access_log/ error_logdeğişkenlerle çalışmak, ancak bazı sınırlamalar ile. server_namedeğişken içeremez.
Alexey Ten

@AlexeyTen Cevabımı tekrar okuyun. Özel değişkenlerle çalışmaz . Sunucu adı gibi yerleşik değişken içerebilir $hostname. Bu davranışı netleştirmek için cevap güncellendi.
Xavier Lucas

5
Eh, $hostnameizin verilen tek değişkendir. github.com/nginx/nginx/blob/… Aslında, daha çok sihirli bir sabit gibi, gerçek bir değişken değil
Alexey Ten


3
Bu belki de gelmiş geçmiş en iyi araştırılmış SF cevabıdır. İkinize de teşekkürler / Cc @AlexeyTen
kaiser
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.