Apache CustomLog, aby zapisać pełny adres URL

16

Chciałbym dodać CustomLogdyrektywę do mojej konfiguracji apache, aby rejestrować pełny żądany adres URL (lub przynajmniej część hosta adresu URL). Mam kilka domen obsługiwanych przez tę samą instancję Apache i chciałbym móc odróżnić domeny w logach (jak teraz widzę tylko „GET /”). Widzę w dokumentacji LogFormat, że zawiera listę %Uczęści ścieżki URL, ale szukam hosta.

jrdioko
źródło

Odpowiedzi:

20

Czytaj dalej LogFormatdokumentację, a znajdziesz:

%...{Foobar}i:  The contents of Foobar: header line(s) in the request
                sent to the server.

Co oznacza, że ​​możesz uwzględnić w swojej konfiguracji:

%{Host}i

%vi%V dyrektywy mogą również uzyskać to, co chcesz.

% v będzie zawsze wartością ServerName(„nazwa kanoniczna” twojego wirtualnego hosta). %V może być wartością ServerNamelub może być wartością Hostnagłówka HTTP , w zależności od tego, czy masz UseCanonicalNamewłączoną konfigurację (i czy klient dostarczył Hostnagłówek).

Larsks
źródło
Czy będzie %{Host}idziałać nawet dla HTTP / 1.0? %Vwygląda na pierwszy rzut oka, dzięki!
jrdioko
Uważam, że% {Host} i (lub dowolny konstrukt% {...} i) wygeneruje wynik tylko wtedy, gdy nagłówek rzeczywiście istnieje w żądaniu. W przypadku HTTP / 1.0 nie spodziewałbym się, że będzie to przydatne.
larsks
Jeszcze jedno wyjaśnienie: %Vczy będzie identyczne jak w %{Host}iprzypadku UseCanonicalNamewyłączenia?
jrdioko
1
Zgodnie z dokumentacją: „Przy wyłączonej funkcji UseCanonicalName Apache utworzy adresy URL z referencyjnymi adresami, używając nazwy hosta i portu dostarczonego przez klienta, jeśli są podane (w przeciwnym razie użyje nazwy kanonicznej, jak zdefiniowano powyżej)”. Więc %Vużyje, ServerNamejeśli nie ma Hostnagłówka.
larsks
2

„% v” to nazwa serwera może być tym, czego chcesz?

agy
źródło
Wygląda na to, że %vzawsze zwraca ten sam ciąg w mojej sytuacji: wartość NazwaSerwera niezależnie od domeny wyświetlanej w adresie URL. Ale %Vwygląda na to, że robi to dobrze.
jrdioko
Jest to związane z nazwą wirtualnego hosta
Robert
2

Dodaj %vdo formatu dziennika.

Coś takiego:

LogFormat "%v - %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined-vhost
CustomLog /log/file/location combined-vhost
Shane Madden
źródło
1
Wygląda na to, że %vzawsze zwraca ten sam ciąg w mojej sytuacji: wartość NazwaSerwera niezależnie od domeny wyświetlanej w adresie URL. Ale %Vwygląda na to, że robi to dobrze.
jrdioko
2

LogFormat "% h% l% u% t \"% r \ "%> s% b \"% {Referer} i \ "\"% {User-Agent} i \ "% {Host} i% U% q „połączone

%{Host}i%U%qpodaje pełny adres URL.

borayeris
źródło