Uji apakah variabel nginx diatur

14

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;
Jan Wrobel
sumber
coba set_if_emptydari github.com/openresty/set-misc-nginx-module
SaveTheRbtz
2
Baru saja menemukan ini sambil mencari sesuatu yang serupa, tetapi sepertinya uninitialized_variable_warntidak 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.
Haravikk
@ Harvikk sepertinya bukan itu masalahnyanginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
n1te
Apakah Anda masih mengaturnya di tempat lain? Saya menggunakan uninitialized_variable_warnsebagai bagian dari php.confyang diimpor hanya oleh lokasi yang mendukung PHP, jadi saya pasti menggunakannya hanya di lingkup itu, sambil meninggalkan peringatan di tempat lain. Saya tidak uninitialized_variable_warnmenetapkan pada lingkup lain (membiarkannya default true).
Haravikk

Jawaban:

11

Saya menggunakan yang berikut untuk memeriksa apakah ada variabel:

if ($dir = false) {
    set $dir "";
}

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.

Ya ampun
sumber
Saya melihat nginx: [emerg] variabel "dir" tidak dikenal
Alex Barker
Pemeriksaan palsu ini tidak berfungsi lagi, silakan gunakan$foo ~ "^$"
Valdrinium
1

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:

if ($arg_test = false) {
    default_type 'text/plain';
    return 404;
}

tidak lolos ke 404. Menggunakan:

if ($arg_test = '') {
    default_type 'text/plain';
    return 404;
}

mengembalikan 404, jika parameter kueri tidak ada. Berguna untuk tidak mencapai hulu jika parameter kueri yang diperlukan tidak ada.

timbo
sumber
0

Opsi yang mudah, jika Anda mengatur variabel secara opsional dalam file yang disertakan, cukup dengan menetapkan nilai default terlebih dahulu.

set $value 'default';
include maybe-set-value.conf;

Pernyataan set kedua dalam file conf akan menggantikan nilai default.

Sam Bull
sumber