如何在 Apache 中记录 URL 方案(http / https)?

如何在 Apache 中记录 URL 方案(http / https)?

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

答案4

定义您的日志输出并向其中添加 %H。这对于 Apache 也是一样的。

因此,您构建一个LogFormat像这样的,并且据我所知,在默认的 apache 配置中定义了几个。

LogFormat "%h %l %u %t \"%r\" %>s %b" common

并将 LogFormat 的名称(在本例中为“common”)添加到日志文件调用的末尾

CustomLog logs/access_log common

点击此处查看有关日志这里关于不同的格式字符串。

相关内容