nginx hat die $scheme
in seinen log_format
Zeilen verwendbare Variable .
%H
ist das Anforderungsprotokoll (zB "HTTP / 1.1").
Wie kann ich dasselbe mit Apache machen?
nginx hat die $scheme
in seinen log_format
Zeilen verwendbare Variable .
%H
ist das Anforderungsprotokoll (zB "HTTP / 1.1").
Wie kann ich dasselbe mit Apache machen?
Antworten:
Eine Möglichkeit besteht darin, zwei bedingte CustomLog
Anweisungen zu haben, die davon abhängen, ob die HTTPS
Variable gesetzt ist.
CustomLog logs/access.log "https://..." env=HTTPS
CustomLog logs/access.log "http://..." env=!HTTPS
Ich habe auch versucht, SetEnvIf
auf folgende Weise zu verwenden, aber es funktioniert nicht (es protokolliert -
):
SetEnv URL_SCHEME=http
SetEnvIf HTTPS on URL_SCHEME=https
CustomLog logs/access.log "%{URL_SCHEME}e://..."
SetEnvIf
funktioniert die Zeile unter Apache <2.4.1 nicht, da mod_setenvif
anscheinend kein Zugriff auf die SSL-Umgebung besteht . hätte mich am 2.2.22 fast verrückt gemacht.
mod_ssl
setzt nur den Umgebungsvariable , wenn Sie explizit sagen , dies zu tun, über SSLOptions
.
Aus irgendeinem Grund konnte ich die obigen Beispiele nicht zum Laufen bringen, also habe ich einen anderen Weg gefunden: Sie können Ihrer Konfiguration zwei Umschreiberegeln wie folgt hinzufügen:
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [E=SCHEME:HTTP]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [E=SCHEME:HTTPS]
Fügen Sie dies dann Ihrer LogFormat-Definition hinzu.
scheme=\"%{SCHEME}e\"
Da das URL-Schema im Apache-Protokollformat nicht direkt verfügbar ist, können Sie den kanonischen Port (z. B. 80/443) des Servers, der die Anforderung bedient, protokollieren, indem Sie alternativ% p verwenden:
CustomLog access.log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" port:%p"
Dies funktioniert bei mir mit Apache 2.4.23:
LogFormat "%{REQUEST_SCHEME}x ..." my_log_format
%{varname}x
ist nur verfügbar, wenn mod_ssl geladen ist, siehe: https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#logformats
Definieren Sie Ihre Protokollausgabe und fügen Sie% H hinzu. Dies gilt auch für Apache.
Sie erstellen also eine LogFormat
solche und afaik gibt es ein paar in der Standard-Apache-Konfiguration definiert.
LogFormat "%h %l %u %t \"%r\" %>s %b" common
und fügen Sie den Namen des LogFormat (in diesem Fall "common") am Ende Ihres Logfile-Aufrufs hinzu
CustomLog logs/access_log common
Suchen Sie hier nach weiteren Informationen zum Protokoll und hier nach den verschiedenen Formatzeichenfolgen.
%H
das nicht das tut, was ich brauche.
mod_env
Bemühungen sind möglicherweise aufgrund von syntaktischen Fehlern gescheitert .SetEnv
nimmt seine Variable und seinen Wert ohne Gleichheitszeichen :SetEnv URL_SCHEME http
.