nginx a la $scheme
variable utilisable dans ses log_format
lignes.
%H
est le protocole de requête (par exemple "HTTP / 1.1").
Comment puis-je faire de même avec Apache?
nginx a la $scheme
variable utilisable dans ses log_format
lignes.
%H
est le protocole de requête (par exemple "HTTP / 1.1").
Comment puis-je faire de même avec Apache?
Réponses:
Une façon de le faire est d'avoir deux CustomLog
directives conditionnelles , contrôlées selon que la HTTPS
variable 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 SetEnvIf
de 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://..."
SetEnvIf
ligne ne fonctionne pas sur apache <2.4.1 car mod_setenvif
n'a apparemment pas accès à l'environnement ssl . m'a presque rendu fou le 2.2.22.
mod_ssl
ne définit la variable d'environnement que si vous lui demandez explicitement de le faire via SSLOptions
.
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\"
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"
Cela fonctionne pour moi avec Apache 2.4.23:
LogFormat "%{REQUEST_SCHEME}x ..." my_log_format
%{varname}x
n'est disponible que lorsque mod_ssl est chargé, voir: https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#logformats
Définissez votre sortie de journal et ajoutez-y% H. C'est la même chose pour Apache.
Donc, vous construisez un LogFormat
comme ç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.
%H
cela ne fait pas ce dont j'ai besoin.
mod_env
efforts peuvent avoir échoué en raison d' erreurs syntaxiques .SetEnv
prend sa variable et la valeur sans signe égal:SetEnv URL_SCHEME http
.