我们有一个使用 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
?它工作正常吗?
还有%V(注意上限)和useCanonicalName选项
%v 一直是虚拟服务器的规范名称,我刚刚检查了 1.3、2.0 和 2.2 的手册,他们都说
https://httpd.apache.org/docs/1.3/mod/mod_log_config.html
https://httpd.apache.org/docs/2.0/mod/mod_log_config.html
https://httpd.apache.org/docs/2.2/mod/mod_log_config.html