Come registrare lo schema URL (http / https) in Apache?


8

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:


3

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://..."

1
i tuoi 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.
glasz,

1
inoltre, la 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.
glasz,

Questa variabile di ambiente sembra specifica di mod_ssl. Se usi un altro modulo, come mod_gnutls, non ce l'hai.
Bortzmeyer,

Inoltre, mod_sslimposta la variabile di ambiente solo se le si dice esplicitamente di farlo tramite SSLOptions.
Florian Brucker,

3

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\"

3

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"

Come sono riusciti a ottenere due voti così rapidamente? In ogni caso, ciò non è utile se si desidera registrare efficacemente gli URL delle richieste, per i quali è necessario lo schema URI del protocollo.
Vladimir Panteleev,

La porta indica il protocollo.
Wick,

3

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



Dov'è documentato% {VARNAME} x? httpd.apache.org/docs/current/mod/mod_log_config.html non menziona x variabili. Lavoro confermato però.
Artem Russakovskii,

-2

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.


1
Um ... Ho già guardato lì. Ho affermato nella mia domanda che %Hnon fa ciò di cui ho bisogno.
Vladimir Panteleev,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.