Назад | Перейти на главную страницу

автоматический выделенный журнал доступа для каждого клиента, использующего ip в именовании

У нас есть внутреннее приложение, и я хочу, чтобы сервер apache httpd создавал новые файлы журнала на основе каждого IP-адреса клиента. В документации я вижу, что у вас может быть несколько журналов.

http://httpd.apache.org/docs/2.2/logs.html

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
CustomLog logs/referer_log "%{Referer}i -> %U"
CustomLog logs/agent_log "%{User-agent}i"

но я действительно хочу что-то вроде этого.

CustomLog logs/%h-access_log common

где% h экстраполируется в IP-адрес, то есть 1.1.1.1-access_log

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

Используйте функцию канала журнала Apache: журналы могут быть отправлены внешнему процессу. Этот процесс будет иметь полную свободу действий, чтобы фильтровать вещи по своему усмотрению и создавать файлы по мере необходимости. Видеть http://httpd.apache.org/docs/2.2/logs.html#piped

Вам просто нужно написать небольшой сценарий, который анализирует ввод журнала, чтобы извлечь IP-адрес и перенаправить строку в соответствующий файл.

В противном случае, если вы контролируете количество клиентов, вы могли бы заранее определить все необходимые файлы, а затем использовать условное ведение журнала через определенные переменные, см. Этот пример по тому же URL:

# Mark requests from the loop-back interface
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
# Mark requests for the robots.txt file
SetEnvIf Request_URI "^/robots\.txt$" dontlog
# Log what remains
CustomLog logs/access_log common env=!dontlog 

Но даже с учетом вашего последнего комментария я все еще считаю, что постобработка - лучший способ. YMMV.