O nginx tem a $scheme
variável utilizável em suas log_format
linhas.
%H
é o protocolo de solicitação (por exemplo, "HTTP / 1.1").
Como posso fazer o mesmo com o Apache?
O nginx tem a $scheme
variável utilizável em suas log_format
linhas.
%H
é o protocolo de solicitação (por exemplo, "HTTP / 1.1").
Como posso fazer o mesmo com o Apache?
Respostas:
Uma maneira de fazer isso é ter duas CustomLog
diretivas condicionais , controladas se a HTTPS
variável está definida.
CustomLog logs/access.log "https://..." env=HTTPS
CustomLog logs/access.log "http://..." env=!HTTPS
Também tentei usar SetEnvIf
da seguinte maneira, mas não funciona (registra -
):
SetEnv URL_SCHEME=http
SetEnvIf HTTPS on URL_SCHEME=https
CustomLog logs/access.log "%{URL_SCHEME}e://..."
SetEnvIf
linha não funciona no apache <2.4.1 porque, mod_setenvif
aparentemente, não tem acesso ao ambiente ssl . quase me deixou louco em 2.2.22.
mod_ssl
apenas define a variável de ambiente se você solicitar explicitamente a fazê-lo via SSLOptions
.
Por alguma razão, não consegui que os exemplos acima funcionassem, então encontrei outra maneira: você pode adicionar 2 regras de reescrita em sua configuração da seguinte maneira:
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [E=SCHEME:HTTP]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [E=SCHEME:HTTPS]
Em seguida, adicione isso à sua definição de LogFormat.
scheme=\"%{SCHEME}e\"
Como o esquema de URL não está diretamente disponível no formato de log apache, você pode registrar a porta canônica (por exemplo, 80/443) do servidor que atende à solicitação usando% p como alternativa:
CustomLog access.log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" port:%p"
Isso funciona para mim com o Apache 2.4.23:
LogFormat "%{REQUEST_SCHEME}x ..." my_log_format
%{varname}x
está disponível apenas quando o mod_ssl é carregado, consulte: https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#logformats
Defina sua saída do log e adicione% H a ela. É o mesmo para o Apache.
Então, você constrói algo LogFormat
assim e depois há alguns definidos na configuração padrão do apache.
LogFormat "%h %l %u %t \"%r\" %>s %b" common
e adicione o nome do LogFormat (neste caso "comum") ao final da sua chamada do arquivo de log
CustomLog logs/access_log common
Basta procurar aqui mais informações sobre o log e aqui sobre as diferentes seqüências de formato.
%H
não faz o que eu preciso.
mod_env
empreendimentos podem ter falhado devido a erros sintáticos .SetEnv
leva o seu variável e valor sem um sinal de igual:SetEnv URL_SCHEME http
.