Puncte:0

Extindere variabilă în fișierul jurnal Apache2 bazat pe cerere

drapel br

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.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.