Aș dori să am fișiere jurnal personalizate pentru fiecare utilizator care accesează o gazdă virtuală.
Numele de utilizator este prezent în variabila de mediu „SSL_CLIENT_S_DN_CN” (care provine de la autentificarea certificatului client).
Așa că mai întâi am încercat ceva de genul
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"
ceea ce evident nu funcționează, deoarece modulul de jurnal nu extinde singur variabila în calea fișierului.
Problema mea este asemanatoare cu asta aici, dar am nevoie de solicitare de înlocuire, nu doar o dată când Apache încarcă configurația site-ului.
mod_macro pare să facă expansiunea o singură dată când configurația este încărcată, așa că această abordare nu îmi rezolvă problema.
De asemenea, am încercat să creez jurnal într-un script extern (logtest) folosind caracteristica „log pipe”, dar aceasta duce la o „eroare în clauza de condiție”:
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"
Este posibil să obțin ceva de genul macrocomenzilor care se execută pentru fiecare cerere, astfel încât să pot crea fișiere jurnal separate pentru fiecare utilizator?
EDITAȚI | ×:
Am o soluție temporară acum folosind „jurnalele de conducte” ca aceasta:
apache site conf:
CustomLog „|/usr/local/bin/apache_logger” „%t %h %{SSL_CLIENT_S_DN_CN}x %{SSL_PROTOCOL}x %{SSL_CIPHER}x %H \"%r\" %b"
scriptul bash situat la /usr/local/bin/apache_logger:
#!/bin/bash
în timp ce citiți STDIN
do
# format: [TIMESTAMP] IP NUME UTILIZATOR TLS CYPHER PROTOCOL „CERERE” DIMENSIUNE
TIMESTAMP=$(echo "$STDIN" | cut -d" " -f1-2)
IP=$(echo "$STDIN" | cut -d" " -f3)
UTILIZATOR=$(echo "$STDIN" | cut -d" " -f4)
TLS=$(echo "$STDIN" | cut -d" " -f5)
CYPHER=$(echo "$STDIN" | cut -d" " -f6)
PROTOCOL=$(echo "$STDIN" | cut -d" " -f7)
CERERE=$(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
Terminat
iesirea 0
Acest lucru pare să funcționeze așa cum era de așteptat pentru moment. Totuși, ar fi grozav dacă acest lucru s-ar putea face fără a fi nevoie de apeluri costisitoare de scripturi externe.