我在我的 Ubuntu 服务器上运行 Apache2。有大量关于 Apache 管理其子进程的内部请求的日志。它用如下行填充日志文件:
::1 - - [10/May/2015:23:16:31 +0200] "OPTIONS * HTTP/1.0" 200 125 "-" "Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.9 OpenSSL/1.0.1f (internal dummy connection)"
::1 - - [10/May/2015:23:16:32 +0200] "OPTIONS * HTTP/1.0" 200 125 "-" "Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.9 OpenSSL/1.0.1f (internal dummy connection)"
::1 - - [10/May/2015:23:16:33 +0200] "OPTIONS * HTTP/1.0" 200 125 "-" "Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.9 OpenSSL/1.0.1f (internal dummy connection)"
因此,我决定排除它们并按照以下说明进行操作内部虚拟连接。
<VirtualHost *:80
...
SetEnvIf Remote_Addr "127\.0\.0\.1" loopback
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined env=!loopback
</VirtualHost>
并使用以下命令重新启动 Apacheservice apache2 restart
我仍然每隔几秒钟就会收到一条日志行。
怎么了?该行是否应该放置在 VirtualHost 定义之外?
答案1
另一种解决方案是定义一个虚拟主机配置文件开头的部分,用于捕获环回接口上的所有请求并将其发送到不同的日志文件或根本不记录它:
<VirtualHost 127.0.0.1:80 [::1]:80>
# catch local requests
ErrorLog ${APACHE_LOG_DIR}/error_local.log
Loglevel warn
CustomLog ${APACHE_LOG_DIR}/access_local.log combined
</VirtualHost>
答案2
正如 KM 所建议的,解决方案是考虑 IPv6。
我将这些行替换为:
SetEnvIf Remote_Addr "::1" loopback
SetEnvIf Remote_Addr "127\.0\.0\.1" loopback
CustomLog logs/access_log combined env=!loopback