O nginx tem a $schemevariável utilizável em suas log_formatlinhas.
%H é o protocolo de solicitação (por exemplo, "HTTP / 1.1").
Como posso fazer o mesmo com o Apache?
O nginx tem a $schemevariável utilizável em suas log_formatlinhas.
%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 CustomLogdiretivas condicionais , controladas se a HTTPSvariável está definida.
CustomLog logs/access.log "https://..." env=HTTPS
CustomLog logs/access.log "http://..." env=!HTTPS
Também tentei usar SetEnvIfda seguinte maneira, mas não funciona (registra -):
SetEnv URL_SCHEME=http
SetEnvIf HTTPS on URL_SCHEME=https
CustomLog logs/access.log "%{URL_SCHEME}e://..."
SetEnvIflinha não funciona no apache <2.4.1 porque, mod_setenvifaparentemente, não tem acesso ao ambiente ssl . quase me deixou louco em 2.2.22.
mod_sslapenas 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}xestá 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 LogFormatassim 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.
%Hnão faz o que eu preciso.
mod_envempreendimentos podem ter falhado devido a erros sintáticos .SetEnvleva o seu variável e valor sem um sinal de igual:SetEnv URL_SCHEME http.