在Apache中使用%v LogFormat定义匹配ServerName而不是请求的特定vhost

我们有一个使用DNS通配符的应用程序,即* .app.example.com。 我们在Ubuntu Hardy上使用Apache 2.2。 Apacheconfiguration的相关部分如下。

在/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等。

以前, LogFormat指令中的%v将与客户端请求的主机名相匹配,我们会在/ 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主机:头告诉vlogger哪个子目录来创build日志,一切都会好起来的。

我唯一担心的是过去曾经有过这样的情况,而且我也看不出有什么迹象表明这种情况最近已经改变了。

有没有其他人使用类似的configuration,即通配符+ vlogger和使用%v ? 它工作正常吗?

%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

https://httpd.apache.org/docs/2.0/mod/mod_log_config.html

https://httpd.apache.org/docs/2.2/mod/mod_log_config.html

还有%V (请注意上限)和useCanonicalName选项