nginx$scheme
在其log_format
行中具有可用的变量。
%H
是请求协议(例如“HTTP/1.1”)。
我如何使用 Apache 做同样的事情?
答案1
这对我适用于 Apache 2.4.23:
LogFormat "%{REQUEST_SCHEME}x ..." my_log_format
%{varname}x
仅在加载 mod_ssl 时可用,请参阅:https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#logformats
答案2
一种方法是使用两个条件CustomLog
指令,由HTTPS
变量是否设置来控制。
CustomLog logs/access.log "https://..." env=HTTPS
CustomLog logs/access.log "http://..." env=!HTTPS
我也尝试过SetEnvIf
以以下方式使用,但它不起作用(它记录-
):
SetEnv URL_SCHEME=http
SetEnvIf HTTPS on URL_SCHEME=https
CustomLog logs/access.log "%{URL_SCHEME}e://..."
答案3
由于某种原因,我无法使上述示例发挥作用,因此找到了另一种方法:您可以在配置中添加 2 条重写规则,如下所示:
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [E=SCHEME:HTTP]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [E=SCHEME:HTTPS]
然后将其添加到您的 LogFormat 定义中。
scheme=\"%{SCHEME}e\"