¿Cómo registrar el esquema de URL (http / https) en Apache?


8

nginx tiene la $schemevariable utilizable en sus log_formatlíneas.

%H es el protocolo de solicitud (por ejemplo, "HTTP / 1.1").

¿Cómo puedo hacer lo mismo con Apache?

Respuestas:


3

Una forma de hacerlo es tener dos CustomLogdirectivas condicionales , controladas por si la HTTPSvariable está configurada.

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

También he intentado usar SetEnvIfde 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://..."

1
sus mod_envesfuerzos pueden haber fallado debido a errores sintácticos . SetEnvtoma su variable y valor sin un signo igual: SetEnv URL_SCHEME http.
— glasz

1
Además, la SetEnvIflínea no funciona en Apache <2.4.1 porque mod_setenvifaparentemente no tiene acceso al entorno SSL . Casi me volvió loco en 2.2.22.
— glasz

Esta variable de entorno parece específica de mod_ssl. Si usa otro módulo, como mod_gnutls, no lo tiene.
— bortzmeyer

Además, mod_sslsolo establece la variable de entorno si le dice explícitamente que lo haga a través de SSLOptions.
— Florian Brucker

3

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

3

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"

¿Cómo consiguió esto dos votos a favor tan rápido? De todos modos, esto no es útil si desea registrar efectivamente las URL de las solicitudes, para lo cual necesita el esquema de URI de protocolo.
— Vladimir Panteleev

El puerto indica el protocolo.
— Wick

3

Esto funciona para mí con Apache 2.4.23:

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

%{varname}xsolo está disponible cuando se carga mod_ssl, consulte: https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#logformats



¿Dónde está documentado% {VARNAME} x? httpd.apache.org/docs/current/mod/mod_log_config.html no menciona las variables x. Confirmado trabajando sin embargo.
— Artem Russakovskii

-2

Defina su salida de registro y agregue% H a ella. Esto es lo mismo para Apache.

Por lo tanto, crea un tipo LogFormatcomo 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.


1
Um ... ya he buscado allí. Dije en mi pregunta que %Hno hace lo que necesito.
— Vladimir Panteleev
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.