Arris
@Arris
Сапиенсы учатся, играя.

NGINX: как задать значение log_not_found через подстановку значения переменной?

Хочется отключить логгирование `log_not_found` для некоторых файлов. Никаких проблем нет, если указать
location = /apple-touch-icon(.*)$ { access_log off; log_not_found off;}

но я не хочу плодить локейшены и пытаюсь использовать map:
map $request_uri $log_not_found_off {
    "/apple-touch-icon.png"                     "off";
    "/apple-touch-icon-precomposed.png"         "off";
    "/favicon.ico"                              "off";
    default                                     "on";
}

Теперь пытаемся использовать:
location / {
        log_not_found   "$log_not_found_off";

        try_files   $uri $uri/ /index.php?$query_string;
    }

Фигушки:
[emerg] invalid value "$log_not_found_off" in "log_not_found" directive, it must be "on" or "off"


Окей, как насчет if ?

location / {
        if ($log_not_found_off = "off") {
            log_not_found "off";
        }

        try_files   $uri $uri/ /index.php?$query_string;
    }

Получаем:
[emerg] "log_not_found_off" directive is not allowed here


ЧЯДНТ?

P.S. При этом, если передать для access_log аналогичное значение ($access_log_off) падает с ошибкой, а если указать ${access_log_off} - конфиг типа валиден (но все равно логгирует).
P.P.S. В комментариях предположили, что оно и не сработает. Окей, укажем вне блока location:

server {
    listen                  80;
    server_name             foobar.local;

    access_log              /var/log/nginx/main.access.log       combined        ;
    error_log               /var/log/nginx/main.error.log        error           ;

    rewrite_log on;

log_not_found       "$log_not_found_off";

#  ИЛИ

    if ($log_not_found_off = "off") {
        log_not_found $log_not_found_off;
    }
...

Результат аналогичный
  • Вопрос задан
  • 320 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы