我有一台非常繁忙的服务器(每秒大约 10-15 个请求),它为多个域提供网页。今天我才意识到,有时“请求”是混杂的。影响很小(可能只有 0.01%),但肯定是个问题。
例如,我有以下脚本
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/host1
ServerName myhostname1.com
...
...
CustomLog ${APACHE_LOG_DIR}/host1.access.log combined
</VirtualHost>
和
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/host2
ServerName myhostname2.com
...
...
CustomLog ${APACHE_LOG_DIR}/host2.access.log combined
</VirtualHost>
但是,有时 host2.access.log 中会出现应该对 host1 执行的请求,反之亦然,就像 apache 会混合请求一样。我还看到很多 408 错误,时间非常短(肯定不是超时,而是出了什么问题)。这些 408 错误似乎也来自其他虚拟服务器。
是否存在任何已知的 apache 问题/错误会导致此问题?
使用 apachectl restart 时,apache error.log 显示:
[Sat May 09 11:40:11 2015] [notice] SIGHUP received. Attempting to restart
apache2: apr_sockaddr_info_get() failed for srv01
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[Sat May 09 11:40:11 2015] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Sat May 09 11:40:11 2015] [notice] Apache/2.2.16 (Debian) PHP/5.3.3-7+squeeze14 with Suhosin-Patch mod_ssl/2.2.16 OpenSSL/0.9.8o configured -- resuming normal operations
谢谢!
编辑:应该可以从其他服务器访问的文件的“混合”访问也出现 408。
答案1
不知道有什么错误,但是 Apache 2.2 现在已经有点过时了。说到这个话题,我注意到您使用的 openssl 0.9.8 肯定太旧了(它不支持 TLS 1.1 或 1.2,只有 0.9.8o 及以上版本(您承认使用的是这个版本)支持 SHA-2 证书,而随着浏览器停止支持 SHA-1 证书,SHA-2 证书很快就变得必不可少)。
无论如何,如果没有 ServerName 或 ServerAlias 与请求匹配,则默认使用第一个配置。因此,如果有人访问 www.myhostname2.com,它将返回第一个主机,而不是第二个主机,这是您可能期望的,因为第二个主机的配置中只指定了 myhostname2.com(没有 www)。如果您需要多个名称,则应添加 ServerAlias 配置。同样,较旧的操作系统/浏览器在端口 443 上的 TLS 请求也存在问题,但您似乎只在这里谈论 http(端口 80)。
但是我无法解释相反的情况(当您期望主机 1 时转到主机 2 配置)。
请阅读此页面,其中详细说明了应如何设置: http://httpd.apache.org/docs/2.2/vhosts/name-based.html 底部还有一些关于根据订单选择错误配置的评论,但我不明白为什么会基于他们提供的有限信息。