nginx ha la $scheme
variabile utilizzabile nelle sue log_format
linee.
%H
è il protocollo di richiesta (ad es. "HTTP / 1.1").
Come posso fare lo stesso con Apache?
nginx ha la $scheme
variabile utilizzabile nelle sue log_format
linee.
%H
è il protocollo di richiesta (ad es. "HTTP / 1.1").
Come posso fare lo stesso con Apache?
Risposte:
Un modo per farlo è disporre di due CustomLog
direttive condizionali , controllate dall'impostazione della HTTPS
variabile.
CustomLog logs/access.log "https://..." env=HTTPS
CustomLog logs/access.log "http://..." env=!HTTPS
Ho anche provato a utilizzare SetEnvIf
nel modo seguente, ma non funziona (registra -
):
SetEnv URL_SCHEME=http
SetEnvIf HTTPS on URL_SCHEME=https
CustomLog logs/access.log "%{URL_SCHEME}e://..."
SetEnvIf
linea non funziona su apache <2.4.1 perché mod_setenvif
apparentemente non ha accesso all'ambiente ssl . quasi mi ha fatto impazzire il 2.2.22.
mod_ssl
imposta la variabile di ambiente solo se le si dice esplicitamente di farlo tramite SSLOptions
.
Per qualche motivo non sono riuscito a far funzionare gli esempi sopra, quindi ho trovato un altro modo: puoi aggiungere 2 regole di riscrittura nella tua configurazione come segue:
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [E=SCHEME:HTTP]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [E=SCHEME:HTTPS]
Quindi aggiungilo nella tua definizione LogFormat.
scheme=\"%{SCHEME}e\"
Poiché lo schema url non è direttamente disponibile nel formato di registro apache, è possibile registrare la porta canonica (ad esempio 80/443) del server che serve la richiesta utilizzando% p in alternativa:
CustomLog access.log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" port:%p"
Questo funziona per me con Apache 2.4.23:
LogFormat "%{REQUEST_SCHEME}x ..." my_log_format
%{varname}x
è disponibile solo quando mod_ssl è caricato, consultare: https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#logformats
Definisci l'output del log e aggiungi% H ad esso. Questo è lo stesso per Apache.
Quindi, costruisci un LogFormat
simile e poi ce ne sono alcuni definiti nella configurazione predefinita di apache.
LogFormat "%h %l %u %t \"%r\" %>s %b" common
e aggiungi il nome del LogFormat (in questo caso "comune") alla fine della tua chiamata al file di log
CustomLog logs/access_log common
Guarda qui per ulteriori informazioni sul registro e qui sulle diverse stringhe di formato.
%H
non fa ciò di cui ho bisogno.
mod_env
sforzi potrebbero non essere riusciti a causa di errori sintattici .SetEnv
prende il variabile e valore senza un segno di uguale:SetEnv URL_SCHEME http
.