VirtualHost 请求混合

VirtualHost 请求混合

我有一台非常繁忙的服务器(每秒大约 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 底部还有一些关于根据订单选择错误配置的评论,但我不明白为什么会基于他们提供的有限信息。

相关内容