Saya perlu mengatur variabel ke nilai default jika belum ditetapkan. Konfigurasi berikut berfungsi:
if ($foo ~ "^$") {
set $foo default-value;
}
Tapi itu menghasilkan peringatan runtime:
menggunakan variabel "foo" yang tidak diinisialisasi
Apakah ada cara untuk menguji apakah suatu variabel diatur tanpa menghasilkan peringatan dan tanpa mematikan peringatan secara global dengan:
uninitialized_variable_warn off;
set_if_empty
dari github.com/openresty/set-misc-nginx-moduleuninitialized_variable_warn
tidak perlu diatur secara global, Anda bisa mengaturnya di mana Anda perlu menggunakan variabel yang berpotensi tidak diinisialisasi. Saya menggunakan ini untuk meneruskan detail SSL ke PHP, yang akan kosong jika halaman diakses tanpa SSL.nginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
uninitialized_variable_warn
sebagai bagian dariphp.conf
yang diimpor hanya oleh lokasi yang mendukung PHP, jadi saya pasti menggunakannya hanya di lingkup itu, sambil meninggalkan peringatan di tempat lain. Saya tidakuninitialized_variable_warn
menetapkan pada lingkup lain (membiarkannya defaulttrue
).Jawaban:
Saya menggunakan yang berikut untuk memeriksa apakah ada variabel:
Jika tidak disetel sebelum mencapai blok lokasi ini, maka itu akan mengaturnya ke string kosong. Anda bisa dengan mudah menambahkan string di antara tanda kutip. Saya tidak mendapatkan kesalahan saat melakukan tes konfigurasi menggunakan ini.
Tolong beri tahu saya jika Anda melihat sebaliknya.
sumber
$foo ~ "^$"
Perilaku tampaknya telah berubah atau setidaknya berbeda untuk menggunakan nilai parameter kueri
$arg_<name>
. Pada nginx 1.13.6, gunakan yang berikut untuk memeriksa apakah ada nilai kueri dalam variabel ngx:tidak lolos ke 404. Menggunakan:
mengembalikan 404, jika parameter kueri tidak ada. Berguna untuk tidak mencapai hulu jika parameter kueri yang diperlukan tidak ada.
sumber
Jika
GET QUERY
deteksi parametermisal: foo.com?
proxy
ada variabel proxy Jangan gunakan$arg_proxy
if ($args ~ '(&|^)proxy([&=]|$)' ) { #exists set $port '8080'; }
https://forum.nginx.org/read.php?2.224860.224860sumber
Opsi yang mudah, jika Anda mengatur variabel secara opsional dalam file yang disertakan, cukup dengan menetapkan nilai default terlebih dahulu.
Pernyataan set kedua dalam file conf akan menggantikan nilai default.
sumber