默认虚拟主机未捕获请求

默认虚拟主机未捕获请求

我有一个 Apache 2.4 服务器,其中启用了两个虚拟主机:

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

/etc/apache2/sites-enabled/my-website.conf

<VirtualHost my-website.com:80>
    ServerAdmin [email protected]
    ServerName my-website.com
    Redirect permanent "/" "https://my-website.com/"
</VirtualHost>

<IfModule mod_ssl.c>
    <VirtualHost my-website.com:443>
    ....
    </VirtualHost>
</IfModule>

我创建了一个指向同一台机器的域名:my-other-website.com。

当我在 my-other-website.com 上发出 http 请求(浏览器、curl 等)时,我期望它能为默认虚拟主机提供服务。但实际上,我得到了 301 重定向到https://my-website.com/

怎么会?

改變<VirtualHost *:80><VirtualHost _default_:80>沒有幫助。

答案1

VirtualHost 的行进有点奇特且特别。

“问题”在于您将 a*:80与之混合hostname:80,当收到针对该 IP 地址和端口号组合的请求时,后者是首选匹配。

并且 *:80 仅仅是针对那些与 my-website.com 域名不具有相同 IP 地址的请求的默认 VirtualHost。

https://httpd.apache.org/docs/2.4/vhosts/details.html#hostmatching

当某个地址和端口上首次接收到连接时,服务器会查找所有具有相同 IP 地址和端口的 VirtualHost 定义。

如果地址和端口没有完全匹配,则考虑通配符 (*) 匹配。

如果没有找到匹配项,则主服务器将处理该请求。

如果有 IP 地址的 VirtualHost 定义,下一步就是决定我们是否必须处理基于 IP 还是基于名称的虚拟主机。

答案2

将两个虚拟主机设为

<VirtualHost *:80>

但是我会为两个主机使用同一个 IP,可以是同一个 IP <VirtualHost xx.xx.xx.xx:80>

相关内容