我们有一台服务器托管许多不同的域名。由于这台服务器已逐步淘汰,我们想知道是否仍有域名指向这台服务器。我希望 Apache 日志能够报告这些域名。
我们的 Apache 日志显示以下数据:
163.172.66.133 - - [16/Dec/2016:11:37:40 +0100] "GET /en/page/test HTTP/1.1" 301 - "-" "Mozilla/5.0 (兼容; AhrefsBot/5.1; +http://ahrefs.com/robot/)”
它应该是所请求页面的完整域名。
163.172.66.133 - - [16/Dec/2016:11:37:40 +0100] “获取 https://www.域名.com/en/page/test HTTP/1.1” 301 - “-” “Mozilla/5.0 (兼容; AhrefsBot/5.1; +http://ahrefs.com/robot/)”
我使用以下 LogFormat:
LogFormat "%h %l %u %t \"%m http://%v:%p%U\" %>s %b" common
有时我会看到完整的域名,但大多数时候看不到。
如何才能让域名一直显示?
答案1
如果你看看官方文档对于日志格式,您将看到标志%v
或%V
可能是您感兴趣的内容,因为它将为您提供已配置的规范服务器名称。因此,最终响应请求的将是块中配置的服务器名称。
由于LogFormat
您提供的行已包含该标识符,因此可能存在多个设置日志格式的配置,并且不包含主机的日志行基于不同的格式。您的格式应该始终使您的行具有与第二个示例类似的格式。
可能仍然存在的问题是,您已配置通配符域,并且无法看到请求的是哪个完整的 FQDN。标题为在 Apache LogFormat 定义中使用 %v 匹配 ServerName,而不是请求的特定 vhost建议您可以使用标识符%{Host}
来获取“客户端视角”,即请求标头的主机部分。
要查找包含某一LogFormat
行的所有配置文件,您可以查看另一个问题,例如以下问题:如何在 Linux 上查找包含特定文本的所有文件?