备份机器上的 Apache httpd 主机名不匹配

备份机器上的 Apache httpd 主机名不匹配

我必须在备份机器上运行 Apache httpd 服务器,该机器是 CentOS。在本例中,它是一个 WordPress 多站点安装。由于它是一台备份机器,DNS 服务器没有指向正确的 IP 地址。

问题是它并不孤单,还有其他虚拟主机。该目录/etc/httpd/conf.d/包含以下文件:、、00-default.conf等,其中一个配置文件包含此 WordPress 多站点备份。每个虚拟主机配置文件看起来或多或少都一样:vhost1.confvhost2.conf

<VirtualHost *:80>
  ServerName vhostX.example.org
  # rest of config goes here
</VirtualHost>

<VirtualHost *:443>
  ServerName vhostX.example.org
  # rest of config goes here
</VirtualHost>

WordPress 备份的虚拟主机部分包含多站点的所有可能的主机名ServerAlias

在我的客户端上,在文件中/etc/hosts,我添加了原始机器的 FQDN 以指向备份机器的 IP 地址。

现在,我观察到的问题如下:

  • 只有 WordPress 多站点实例的主网站响应正确,尽管它也给出为ServerAlias,而不是ServerName
  • 列出的所有其他域名ServerAlias都由配置的虚拟主机处理,00-default.conf而不是备份的虚拟主机。这是我最不明白的烦人之处。由于 SNI 和 HTTP 标头中都给出了正确的主机名,我希望它能选择正确的虚拟主机配置,因为域名在那里列为ServerAlias
  • 如果我用 IP 地址符号替换*:80和,即,那么这个 WordPress 备份可以正常工作,但其他任何功能都不起作用(我认为一切都由 WordPress 多站点实例处理,该实例配置为重定向到我们的主要网站)。*:443192.168.1.2:80192.168.1.2:443

我尝试过的:客户端上的命令(主机名和 IP 地址已删除):

curl -vkLo- --resolve wpsite1.example.org:80:192.168.1.2 --resolve wpsite1.example.org:443:192.168.1.2 'http://wpsite1.example.org'

该文件/etc/nsswitch.conf设置为在查询 DNS 服务器之前解析 hosts 文件(如果这有任何相关性的话)。我还尝试将 IP 地址添加到服务器的文件中/etc/hosts。据我所知,我假设 httpd 在启动时尝试解析 DNS 名称,但由于 DNS 服务器将名称解析为有效的 IP 地址,因此它不起作用。

我该如何解决这个问题?我是否必须为主机分配第二个 IP 地址?

答案1

第二天,我发现了最不明显的事情:

$ apachectl -S
[...]
141.201.80.66:80       is a NameVirtualHost
         default server one-of-the-wp-single-sites.example.org (/etc/httpd/conf.d/00_defaults.conf:1)
[...]

出于某种原因,我立即想到这个域名是文件中列出的第一个具有此 IP 地址的域名。在文件中其他行之前/etc/hosts插入本地主机名即可解决问题:/etc/hosts

192.168.1.2   this-host.example.org

重新加载Httpd,一切正常。

相关内容