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的信息。