我们有一个使用 DNS 通配符的应用程序,即 *.app.example.com。我们在 Ubuntu Hardy 上使用 Apache 2.2。Apache 配置的相关部分如下。
在 /etc/apache2/httpd.conf 中:
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vlog
在 /etc/apache2/sites-enabled/app.example.com 中:
ServerName app.example.com
ServerAlias *.app.example.com
...
CustomLog "|/usr/sbin/vlogger -s access.log /var/log/apache2/vlogger" vlog
客户端使用自己的 URL 访问此应用程序,例如 company1.app.example.com、company2.app.example.com 等。
以前,指令%v
中的LogFormat
将与客户端请求的主机名匹配,并且我们会在 /var/log/apache2/vlogger 下获得与正在使用的各种客户端 URL 相对应的几个子目录。
现在,%v
似乎与值匹配ServerName
,因此我们只能在 /var/log/apache2/vlogger/app.example.com 下获得一个日志。这会破坏我们的日志文件分析,因为日志文件没有指示日志与哪个客户端相关。
我可以通过将其更改LogFormat
为以下内容来轻松修复此问题:
LogFormat "%{Host}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vlog
这将使用 HTTP Host: 标头来告诉 vlogger 在哪个子目录中创建日志,一切都会正常。
我唯一担心的是,这种方法在过去是有效的,但我找不到任何迹象表明最近发生了变化。
是否有其他人使用类似的配置,即通配符 + vlogger 并使用%v
?它工作正常吗?
答案1
%v 一直是 vserver 的规范名称,我刚刚查看了 1.3、2.0 和 2.2 的手册,它们都说
%...v: The canonical ServerName of the server serving the request.
https://httpd.apache.org/docs/1.3/mod/mod_log_config.html