nginx ha la $schemevariabile utilizzabile nelle sue log_formatlinee.
%H è il protocollo di richiesta (ad es. "HTTP / 1.1").
Come posso fare lo stesso con Apache?
nginx ha la $schemevariabile utilizzabile nelle sue log_formatlinee.
%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 CustomLogdirettive condizionali , controllate dall'impostazione della HTTPSvariabile.
CustomLog logs/access.log "https://..." env=HTTPS
CustomLog logs/access.log "http://..." env=!HTTPS
Ho anche provato a utilizzare SetEnvIfnel modo seguente, ma non funziona (registra -):
SetEnv URL_SCHEME=http
SetEnvIf HTTPS on URL_SCHEME=https
CustomLog logs/access.log "%{URL_SCHEME}e://..."
SetEnvIflinea non funziona su apache <2.4.1 perché mod_setenvifapparentemente non ha accesso all'ambiente ssl . quasi mi ha fatto impazzire il 2.2.22.
mod_sslimposta 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 LogFormatsimile 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.
%Hnon fa ciò di cui ho bisogno.
mod_envsforzi potrebbero non essere riusciti a causa di errori sintattici .SetEnvprende il variabile e valore senza un segno di uguale:SetEnv URL_SCHEME http.