Вопрос по access_log

CoDDoC coddoc на mail.ru
Пт Фев 9 09:38:32 UTC 2018


Доброе время суток!
nginx/1.13.8

Случайно обнаружилась непонятка.

Конфиг 1:
http {
        ....
        log_format f1 '[$time_local - 1]';
        log_format f2 '[$time_local - 2]';

        access_log /var/log/nginx/1.log f1;
        access_log /var/log/nginx/2.log f2;

        server {
            listen ...
            root ....
            index .....
#            access_log /var/log/nginx/1.log f1;
#            access_log /var/log/nginx/2.log f2;
        }
}

Делаем запрос и получаем ожидаемое: запись в ОБА файла.
-------------------------------------------------------------------------------------------
Теперь так.
Конфиг 2:
http {
        ....
        log_format f1 '[$time_local - 1]';
        log_format f2 '[$time_local - 2]';

        access_log /var/log/nginx/1.log f1;
#        access_log /var/log/nginx/2.log f2;

        server {
            listen ...
            root ....
            index .....
#            access_log /var/log/nginx/1.log f1;
            access_log /var/log/nginx/2.log f2;
        }
}

И запись ТОЛЬКО во второй файл.
-------------------------------------------------------------------------------------------
Конфиг 3:
http {
        ....
        log_format f1 '[$time_local - 1]';
        log_format f2 '[$time_local - 2]';

#        access_log /var/log/nginx/1.log f1;
#        access_log /var/log/nginx/2.log f2;

        server {
            listen ...
            root ....
            index .....
            access_log /var/log/nginx/1.log f1;
            access_log /var/log/nginx/2.log f2;
        }
}

Опять все ожидаемо, запись в оба файла.
-------------------------------------------------------------------------------------------
В server / location похожая ситуация:
server {
    listen ...
    root ...
    index ...
    ....
    access_log /var/log/nginx/1.log f1;
    ........

    # Все, что не совпало с разрешенными
    location "" {
        return 404;
    }

    error_page 404 = @err404;

    location @err404 {
        keepalive_timeout 0;
        rewrite ^ /err/404.html break;
        access_log /var/log/nginx/2.log f2;
    }
}

Ожидаемо: бредовый запрос должен отметиться и в 1.log, и в 2.log
По факту: если работает "access_log /var/log/nginx/2.log f2;", соответственно, не работает "access_log /var/log/nginx/1.log f1;"
Правильный запрос приходит в 1.log, бредовый - в 2.log

Если "access_log /var/log/nginx/2.log f2;" отключить, тогда в 1.log приходят все запросы, и правильные, и бредовые.

access_log в нижестоящем контексте отменяет все вышестоящие?
--
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20180209/7d5edf3a/attachment.html>


Подробная информация о списке рассылки nginx-ru