Рейтинг:0

Расширение переменной в запросе файла журнала Apache2 на основе

флаг br

Я хотел бы иметь настраиваемые файлы журналов для каждого пользователя, обращающегося к виртуальному хосту. Имя пользователя присутствует в переменной среды "SSL_CLIENT_S_DN_CN" (исходя из проверки подлинности сертификата клиента). Итак, сначала я попробовал что-то вроде

 CustomLog /var/log/apache2/by_user/%{SSL_CLIENT_S_DN_CN}x.log \
      "%t %h %{SSL_CLIENT_S_DN_CN}x %{SSL_PROTOCOL}x %{SSL_CIPHER}x %H \"%r\" %b"

что, очевидно, не работает, поскольку модуль журнала сам по себе не расширяет переменную в пути к файлу.

Моя проблема похожа на это здесь, но мне нужна подстановка на основе запроса, а не только один раз, когда Apache загружает конфигурацию сайта.

mod_macro, кажется, делает расширение только один раз, когда загружается конфигурация, поэтому этот подход не решает мою проблему.

Я также пытался создать журнал во внешнем скрипте (logtest), используя функцию «log pipe», но это приводит к «ошибке в условии условия»:

CustomLog "|/usr/local/bin/logtest" "/var/log/apache2/by_user/%{SSL_CLIENT_S_DN_CN}x.log" \
"%t %h %{SSL_CLIENT_S_DN_CN}x %{SSL_PROTOCOL}x %{SSL_CIPHER}x %H \"%r\" %b"

Можно ли получить что-то вроде макросов, выполняемых для каждого отдельного запроса, чтобы я мог создавать отдельные файлы журнала для каждого пользователя?

РЕДАКТИРОВАТЬ:

Теперь у меня есть временное решение, использующее "конвейерные журналы", например:

Конфигурация сайта апача:

CustomLog "|/usr/local/bin/apache_logger" "%t %h %{SSL_CLIENT_S_DN_CN}x %{SSL_PROTOCOL}x %{SSL_CIPHER}x %H \"%r\" %b"

bash-скрипт, расположенный в /usr/local/bin/apache_logger:

#!/бин/баш

при чтении STDIN
делать

  # формат: [TIMESTAMP] IP ИМЯ ПОЛЬЗОВАТЕЛЯ TLS CYPHER PROTOCOL "ЗАПРОС" РАЗМЕР
  TIMESTAMP=$(echo "$STDIN" | cut -d" " -f1-2)
  IP=$(echo "$STDIN" | cut -d" " -f3)
  USER=$(echo "$STDIN" | cut -d" " -f4)
  TLS=$(эхо "$STDIN" | вырезать -d" " -f5)
  CYPHER=$(echo "$STDIN" | cut -d" " -f6)
  ПРОТОКОЛ=$(echo "$STDIN" | cut -d" " -f7)
  ЗАПРОС=$(echo "$STDIN" | cut -d" " -f8-10)
  SIZE=$(echo "$STDIN" | cut -d" " -f11)

  echo "$TIMESTAMP $IP $USER $TLS $CYPHER $PROTOCOL $REQUEST $SIZE" >> /var/log/apache2/by_user/$USER.log

сделано
выход 0

Похоже, на данный момент это работает так, как ожидалось. Тем не менее, было бы здорово, если бы это можно было сделать без дорогостоящих вызовов внешних скриптов.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.