nginx mengatur variabel di lokasi


37

Saya mencoba untuk mengoptimalkan konfigurasi nginx saya, jadi akan mungkin untuk menetapkan satu variabel, dan semua jalur lokasi akan diperbarui secara otomatis. Saya memiliki empat baris yang dipertanyakan:

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;

Yang ingin saya capai adalah menetapkan satu variabel (dalam hal ini 'php') dan memasukkannya ke konfigurasi.

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;

Namun terlihat bahwa nginx mengabaikan variabel dalam konfigurasi ini. Apakah saya melakukan sesuatu yang salah atau tidak mungkin menggunakan variabel di jalur lokasi?

Jawaban:


58

Variabel tidak dapat dideklarasikan di mana saja atau digunakan dalam arahan apa pun.

Sebagai dokumentasi setarahan adalah:

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

Konsekuensi langsungnya adalah Anda tidak dapat menggunakan variabel khusus di httpblok.

Pembaruan : setelah diskusi dan percobaan dengan AlexeyTen di ruang obrolan ini .

  • access_logdapat berisi variabel dengan batasan. Di antara mereka, kurangnya buffering dan fakta bahwa garis miring tidak boleh dinyatakan dalam variabel .
  • error_log tidak akan bekerja dengan variabel sama sekali.
  • root direktif dapat berisi variabel.
  • server_namedirektif hanya memungkinkan $hostnamenilai ketat sebagai notasi seperti variabel.

1
access_logSaya error_logbekerja dengan variabel, tetapi dengan beberapa batasan. server_nametidak dapat berisi variabel.
Alexey Ten

@AlexeyTen Baca kembali jawaban saya. Itu tidak berfungsi dengan variabel khusus . Nama server dapat berisi built-in variabel seperti $hostname. Memperbarui jawaban untuk memperjelas perilaku itu.
Xavier Lucas

5
Ya, $hostnameitu satu-satunya variabel yang diizinkan.github.com/nginx/nginx/blob/... Sebenarnya, ini lebih seperti konstanta ajaib, bukan variabel nyata
Alexey Ten


3
Ini mungkin yang terbaik diteliti jawaban SF pernah. Terima kasih untuk Anda berdua / Cc @AlexeyTen
kaiser
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.