nginx tiene la $scheme
variable utilizable en sus log_format
líneas.
%H
es el protocolo de solicitud (por ejemplo, "HTTP / 1.1").
¿Cómo puedo hacer lo mismo con Apache?
nginx tiene la $scheme
variable utilizable en sus log_format
líneas.
%H
es el protocolo de solicitud (por ejemplo, "HTTP / 1.1").
¿Cómo puedo hacer lo mismo con Apache?
Respuestas:
Una forma de hacerlo es tener dos CustomLog
directivas condicionales , controladas por si la HTTPS
variable está configurada.
CustomLog logs/access.log "https://..." env=HTTPS
CustomLog logs/access.log "http://..." env=!HTTPS
También he intentado usar SetEnvIf
de la siguiente manera, pero no funciona (se registra -
):
SetEnv URL_SCHEME=http
SetEnvIf HTTPS on URL_SCHEME=https
CustomLog logs/access.log "%{URL_SCHEME}e://..."
SetEnvIf
línea no funciona en Apache <2.4.1 porque mod_setenvif
aparentemente no tiene acceso al entorno SSL . Casi me volvió loco en 2.2.22.
mod_ssl
solo establece la variable de entorno si le dice explícitamente que lo haga a través de SSLOptions
.
Por alguna razón, no pude hacer que los ejemplos anteriores funcionen, así que lo encontré de otra manera: puede agregar 2 reglas de reescritura en su configuración de la siguiente manera:
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [E=SCHEME:HTTP]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [E=SCHEME:HTTPS]
Luego agregue esto a su definición de LogFormat.
scheme=\"%{SCHEME}e\"
Como el esquema de URL no está disponible directamente en formato de registro apache, puede registrar el puerto canónico (por ejemplo, 80/443) del servidor que atiende la solicitud utilizando% p como alternativa:
CustomLog access.log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" port:%p"
Esto funciona para mí con Apache 2.4.23:
LogFormat "%{REQUEST_SCHEME}x ..." my_log_format
%{varname}x
solo está disponible cuando se carga mod_ssl, consulte: https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#logformats
Defina su salida de registro y agregue% H a ella. Esto es lo mismo para Apache.
Por lo tanto, crea un tipo LogFormat
como este y afaik hay un par definido en la configuración predeterminada de apache.
LogFormat "%h %l %u %t \"%r\" %>s %b" common
y agregue el nombre de LogFormat (en este caso "común") al final de su llamada al archivo de registro
CustomLog logs/access_log common
Simplemente busque aquí más información sobre el registro y aquí sobre las diferentes cadenas de formato.
%H
no hace lo que necesito.
mod_env
esfuerzos pueden haber fallado debido a errores sintácticos .SetEnv
toma su variable y valor sin un signo igual:SetEnv URL_SCHEME http
.