Перевірте, чи встановлено змінну nginx


15

Мені потрібно встановити змінну на значення за замовчуванням, якщо вона вже не встановлена. Наступна конфігурація виконує завдання:

if ($foo ~ "^$") {
   set $foo default-value;
}

Але він генерує попередження про виконання:

за допомогою неініціалізованої змінної "foo"

Чи є спосіб перевірити, чи встановлена ​​змінна без генерації попередження та без вимкнення попередження глобально за допомогою:

uninitialized_variable_warn off;

спробуйте set_if_emptyз github.com/openresty/set-misc-nginx-module
SaveTheRbtz

2
Щойно знайшли це, шукаючи щось подібне, але, схоже uninitialized_variable_warn, не потрібно його встановлювати глобально, ви можете просто встановити його там, де потрібно використовувати потенційно неініціалізовані змінні. Я використовую це для передачі даних про SSL до PHP, який буде порожнім, якщо доступ до сторінки без SSL.
Харавік

@Haravikk, схоже, це не такnginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
n1te

У вас все ще встановлено десь ще? Я використовую uninitialized_variable_warnяк частину, php.confяка імпортується лише в тих місцях, які підтримують PHP, тому я, безумовно, використовую її лише в тих областях, залишаючи попередження всюди. Я не uninitialized_variable_warnвстановив жодної іншої області застосування (дозволяючи це за замовчуванням true).
Харавік

Відповіді:


11

Я використовую наступне для перевірки наявності змінної:

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

Якщо він не встановлений до того, як він досягне цього блоку розташування, він встановить його в порожній рядок. Ви можете так само легко додати рядок між цитатами. Я не отримую помилок під час тестування конфігурації, використовуючи це.

Будь ласка, дайте мені знати, якщо ви бачите інше.


Я бачу nginx: [emerg] невідома змінна "dir"
Алекс Баркер

1
Ця помилкова перевірка більше не працює, будь ласка, використовуйте$foo ~ "^$"
Valdrinium

2

Здається, що поведінка змінилася або принаймні відрізняється для значень параметрів запиту з використанням $arg_<name>. На nginx 1.13.6, використовуючи наступне, щоб перевірити, чи існує значення запиту в змінній ngx:

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

не переходить до 404. Використання:

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

повертає 404, якщо параметр запиту не існує. Корисно для не потрапляння вгору за течією, якщо необхідний параметр запиту не існує.



0

Простий варіант, якщо ви необов'язково встановлюєте змінну у включеному файлі, - просто спочатку встановити значення за замовчуванням.

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

Оператор другого набору у файлі conf замінить значення за замовчуванням.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.