Вопрос: Как отключить ведение журнала Apache при доступе к определенным каталогам?


Как получить apache для предотвращения регистрации HTTP-запросов в каталоге? Я хочу что-то сделать

<IfModule mod_userdir.c>
    UserDir public_html

    <Directory /home/*/public_html/nolog>
        Options NoAccessLog
    </Directory>
</IfModule>

6
2018-03-07 01:35


Источник




Ответы:


Вы можете установить флаг среды всякий раз, когда запрашивается конкретный URL-адрес и регистрируется фильтрация на основе этого:

<IfModule mod_userdir.c> 
    UserDir public_html 

    SetEnvIf Request_URI "/nolog" dontlog
    CustomLog /var/log/apache2/useraccess_log combined env=!dontlog
</IfModule> 

Все связанные чтения можно найти по адресу http://httpd.apache.org/docs/2.2/env.html Раздел «Использование переменных среды - условный журнал»

Что делают эти две строки, когда клиент запрашивает URL-адрес, содержащий строку «/ nolog», он устанавливает dontlog Environment Variable.

В следующей строке опция «env =! Dontlog» сообщает директиве CustomLog для входа в клиентский доступ, если не задана переменная dontlog. ! отрицает директиву. Если вы оставите! так что он читает «env = dontlog», чем он только log access to paths, которые имеют «/ nolog» в запрошенном URL.

EDIT: я удалил ^ в "/ nolog" regexp для работы с вашим примером и добавил еще несколько объяснений.


8
2018-03-07 07:16



Не работает для меня - доступ по-прежнему регистрируется. Не могли бы вы рассказать немного больше и интегрировать его в данный пример mod_userdir? Благодаря! - nidi
Хорошо, я обновил свой ответ, чтобы соответствовать вашему примеру. В основном вы просто не указываете ^ в регулярном выражении. «^ / nolog» будет соответствовать только URL-адресам example.com/nolog/foobar но поскольку у вас всегда есть имя пользователя, example.com/~user/nolog/foobar это не соответствовало бы. Поэтому просто удалите ^, и он должен работать. Конечно, вы можете еще больше настроить это регулярное выражение, чтобы включить сопоставление имени пользователя и т. Д. Теперь он будет соответствовать каждому URL-адресу, который содержит строку «/ nolog». - Lukas Loesche
Большой! Спасибо за объяснение! - nidi
Мне не удалось заставить это работать (apache 2.2.3), прежде чем переключиться с использования грациозного на использование перезапуска apachectl. Тогда это сработало отлично. - anttiR