nginx $scheme
在其log_format
行中具有可用变量。
%H
是请求协议(例如“ HTTP / 1.1”)。
如何使用Apache进行相同操作?
nginx $scheme
在其log_format
行中具有可用变量。
%H
是请求协议(例如“ HTTP / 1.1”)。
如何使用Apache进行相同操作?
Answers:
一种方法是有两个条件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://..."
mod_ssl
仅当您通过明确告诉环境变量设置环境变量时,才进行设置SSLOptions
。
由于url方案不是直接以apache日志格式提供,因此您可以使用%p作为替代方法来记录服务请求的服务器的规范端口(例如80/443):
CustomLog access.log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" port:%p"
这对我适用于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相同。
因此,您构建了一个LogFormat
这样的程序,并且afaik在默认的Apache配置中定义了几个。
LogFormat "%h %l %u %t \"%r\" %>s %b" common
并将LogFormat的名称(在本例中为“ common”)添加到日志文件调用的末尾
CustomLog logs/access_log common
%H
并不能满足我的需求。
mod_env
尝试可能因语法错误而失败。SetEnv
接受不带等号的变量和值:SetEnv URL_SCHEME http
。