Хочется отключить логгирование `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;
}
...
Результат аналогичный