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;


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.


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.



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.

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.