Comment enregistrer le schéma d'URL (http / https) dans Apache?

8

nginx a la $schemevariable utilisable dans ses log_formatlignes.

%H est le protocole de requête (par exemple "HTTP / 1.1").

Comment puis-je faire de même avec Apache?

Vladimir Panteleev
la source

Réponses:

3

Une façon de le faire est d'avoir deux CustomLogdirectives conditionnelles , contrôlées selon que la HTTPSvariable est définie ou non.

CustomLog logs/access.log "https://..." env=HTTPS
CustomLog logs/access.log "http://..." env=!HTTPS

J'ai également essayé d'utiliser SetEnvIfde la manière suivante, mais cela ne fonctionne pas (il se connecte -):

SetEnv URL_SCHEME=http
SetEnvIf HTTPS on URL_SCHEME=https
CustomLog logs/access.log "%{URL_SCHEME}e://..."
Vladimir Panteleev
la source
1
vos mod_envefforts peuvent avoir échoué en raison d' erreurs syntaxiques . SetEnvprend sa variable et la valeur sans signe égal: SetEnv URL_SCHEME http.
glasz
1
aussi, la SetEnvIfligne ne fonctionne pas sur apache <2.4.1 car mod_setenvifn'a apparemment pas accès à l'environnement ssl . m'a presque rendu fou le 2.2.22.
glasz
Cette variable d'environnement semble spécifique à mod_ssl. Si vous utilisez un autre module, tel que mod_gnutls, vous ne l'avez pas.
bortzmeyer
En outre, mod_sslne définit la variable d'environnement que si vous lui demandez explicitement de le faire via SSLOptions.
Florian Brucker
3

Pour une raison quelconque, je n'ai pas pu faire fonctionner les exemples ci-dessus, j'ai donc trouvé un autre moyen: vous pouvez ajouter 2 règles de réécriture dans votre configuration comme suit:

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [E=SCHEME:HTTP]

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [E=SCHEME:HTTPS]

Ajoutez ensuite cela dans votre définition LogFormat.

scheme=\"%{SCHEME}e\"
bstokes
la source
3

Comme le schéma d'url n'est pas directement disponible au format de journal Apache, vous pouvez enregistrer le port canonique (par exemple 80/443) du serveur servant la demande en utilisant% p comme alternative:

CustomLog access.log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" port:%p"
Stefan
la source
Comment cela a-t-il pu obtenir deux votes positifs si rapidement? Quoi qu'il en soit, cela n'est pas utile si vous souhaitez enregistrer efficacement les URL des demandes, pour lesquelles vous avez besoin du schéma d'URI du protocole.
Vladimir Panteleev
Le port indique le protocole.
Wick
3

Cela fonctionne pour moi avec Apache 2.4.23:

LogFormat "%{REQUEST_SCHEME}x ..." my_log_format

%{varname}xn'est disponible que lorsque mod_ssl est chargé, voir: https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#logformats

David Caldwell
la source
httpd.apache.org/docs/current/mod/mod_rewrite.html documente cette variable.
Artem Russakovskii
Où est% {VARNAME} x bien documenté? httpd.apache.org/docs/current/mod/mod_log_config.html ne mentionne pas les variables x. Travail confirmé cependant.
Artem Russakovskii
-2

Définissez votre sortie de journal et ajoutez-y% H. C'est la même chose pour Apache.

Donc, vous construisez un LogFormatcomme ça et afaik il y en a un couple défini dans la configuration par défaut d'Apache.

LogFormat "%h %l %u %t \"%r\" %>s %b" common

et ajoutez le nom du LogFormat (dans ce cas "commun") à la fin de votre appel de fichier journal

CustomLog logs/access_log common

Regardez ici pour plus d'informations sur le journal et ici pour les différentes chaînes de format.

Chris
la source
1
Hum ... J'ai déjà regardé là-bas. J'ai dit dans ma question que %Hcela ne fait pas ce dont j'ai besoin.
Vladimir Panteleev