Apache CustomLog, um die vollständige URL zu protokollieren

16

Ich möchte CustomLogmeiner Apache-Konfiguration eine Direktive hinzufügen , um die angeforderte vollständige URL (oder zumindest den Host-Teil der URL) zu protokollieren. Ich habe mehrere Domains, die von der gleichen Instanz von Apache verwaltet werden, und möchte die Domains in den Protokollen unterscheiden können (da jetzt nur noch "GET /" angezeigt wird). Ich sehe in der Dokumentation zu LogFormat, dass es auflistet %U, den Pfad-Teil der URL zu drucken, aber ich suche nach dem Host.

jrdioko
quelle

Antworten:

20

Lesen Sie die LogFormatDokumentation weiter und Sie werden feststellen:

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

Das heißt, Sie könnten Folgendes in Ihre Konfiguration aufnehmen:

%{Host}i

Mit den Anweisungen %vund %Vkönnen Sie auch das bekommen, was Sie wollen.

% v ist immer der Wert von ServerName(der "kanonische Name" Ihres virtuellen Hosts). %V Dies kann der Wert von ServerNameoder der Wert des HTTP- HostHeaders sein, abhängig davon, ob Sie UseCanonicalNamein Ihrer Konfiguration aktiviert haben oder nicht (und ob der Client einen HostHeader angegeben hat).

larsks
quelle
Funktioniert das %{Host}iauch für HTTP / 1.0? %Vsieht auf den ersten blick richtig aus, danke!
jrdioko
Ich glaube, dass% {Host} i (oder ein beliebiges% {...} i-Konstrukt) nur dann ein Ergebnis liefert, wenn dieser Header tatsächlich in der Anforderung vorhanden ist. Für HTTP / 1.0 würde ich also nicht erwarten, dass es nützlich ist.
Larsks
Noch eine Klarstellung: %VWird also identisch sein, %{Host}iwenn UseCanonicalNamedeaktiviert ist?
jrdioko
1
In der Dokumentation heißt es, dass Apache bei deaktiviertem UseCanonicalName unter Verwendung des vom Client angegebenen Hostnamens und Ports selbstreferenzierende URLs erstellt (andernfalls wird der oben definierte kanonische Name verwendet). So %Vwird verwenden , ServerNamewenn es keine HostHeader.
Larsks
2

'% v' ist der Servername was Sie wollen?

Agy
quelle
Es sieht so aus, als würde %vin meiner Situation immer dieselbe Zeichenfolge zurückgegeben: der Servername, unabhängig davon, welche Domäne in der URL enthalten ist. %VSieht aber so aus, als würde es das Richtige tun.
jrdioko
Das hängt mit dem Namen des virtuellen Hosts zusammen
Robert
2

Fügen Sie %vIhrem Protokollformat hinzu.

Etwas wie das:

LogFormat "%v - %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined-vhost
CustomLog /log/file/location combined-vhost
Shane Madden
quelle
1
Es sieht so aus, als würde %vin meiner Situation immer dieselbe Zeichenfolge zurückgegeben: der Servername, unabhängig davon, welche Domäne in der URL enthalten ist. %VSieht aber so aus, als würde es das Richtige tun.
jrdioko
2

LogFormat "% h% l% u% t \"% r \ "% s% b \"% {Referer} i \ "\"% {User-Agent} i \ "% {Host} i% U% q "kombiniert

%{Host}i%U%qgibt volle URL.

borayeris
quelle