我们有一台运行七个域/子域的服务器。为了尽量减少这里的数量,我将包括其中的四个。
服务器在 90% 的时间内都运行良好,但偶尔我们会收到大量请求并且数据库服务器出现故障。这然后最大的 apache 连接,因为所有的数据库连接都在等待超时。一切顺利,我们强制重启数据库,连接恢复。但是,请求随后会进入 dfw.example.com 配置。该部署没有我们的代码库,这是一个大问题,我不明白为什么会发生这种情况。发生这种情况时,它也会始终进行该部署,而我们拥有的其他 5 个部署中的任何一个都不会。
从我阅读的文档中,我认为 Apache 通读了 httpd.conf 文件并查找了第一个 NamedVirtualHost 匹配项:
现在,当请求到达时,服务器将首先检查它是否使用与 NameVirtualHost 匹配的 IP 地址。如果是,那么它将查看
<VirtualHost>具有匹配 IP 地址的每个部分,并尝试找到 ServerName 或 ServerAlias 与请求的主机名匹配的部分。如果找到,则使用该服务器的配置。如果未找到匹配的虚拟主机,则将使用与 IP 地址匹配的第一个列出的虚拟主机。
我们正在运行 Apache 2.2.15。
我认为与 httpd.conf 文件相关的部分:
Listen 80
Listen 255.255.255.255:443
Run Code Online (Sandbox Code Playgroud)
...
ServerName www.example.com
Run Code Online (Sandbox Code Playgroud)
...(这是确切的顺序,www (https/http),dfw,然后是所有其他版本)
NameVirtualHost www.example.com:80
<VirtualHost www.example.com:80>
ServerAdmin webmaster@example.com
DocumentRoot /var/www/html/www.example.com
ServerName www.example.com
DirectoryIndex index.html
DirectoryIndex index.php
LogLevel notice
ErrorLog /var/log/httpd/www.example.com/error.log
CustomLog /var/log/httpd/www.example.com/access.log w3c_extended
</VirtualHost>
NameVirtualHost www.example.com:443
<VirtualHost www.example.com:443>
ServerAdmin webmaster@example.com
DocumentRoot …Run Code Online (Sandbox Code Playgroud)