如何在Apache中loggingURLscheme(http / https)?

nginx具有可用于其log_format行的$schemevariables。

%H是请求协议(例如“HTTP / 1.1”)。

我怎样才能做到这一点与Apache?

    一种方法是具有两个条件CustomLog指令,由HTTPSvariables是否被设置来控制。

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

    我也尝试以下方式使用SetEnvIf ,但它不起作用(它logging- ):

     SetEnv URL_SCHEME=http SetEnvIf HTTPS on URL_SCHEME=https CustomLog logs/access.log "%{URL_SCHEME}e://..." 

    由于urlscheme不能以apache日志格式直接提供,因此可以使用%p作为备选方法logging服务请求的服务器的规范端口(例如80/443):

     CustomLog access.log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" port:%p" 

    出于某种原因,我无法得到上面的例子工作,所以find了另一种方法:你可以添加2个重写规则到你的configuration如下:

     RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ - [E=SCHEME:HTTP] RewriteCond %{HTTPS} =on RewriteRule ^(.*)$ - [E=SCHEME:HTTPS] 

    然后将其添加到您的LogFormat定义中。

     scheme=\"%{SCHEME}e\" 

    这适用于我的Apache 2.4.23:

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

    %{varname}x仅在加载mod_ssl时可用,请参阅: https : //httpd.apache.org/docs/trunk/mod/mod_ssl.html#logformats

    定义您的日志输出并添加%H。 这对于Apache来说是一样的。

    所以,你build立一个像这样的LogFormat和afaik,在默认的apacheconfiguration中定义了一对。

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

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

     CustomLog logs/access_log common 

    只需在这里查看有关日志的更多信息,以及关于不同格式string的信息。