Apache 2 具有一个 IP vhost 的多个命名虚拟主机

Apache 2 具有一个 IP vhost 的多个命名虚拟主机

我有一个在 AWS 上运行的实例,带有 Apache 2、两个命名域和一个 IP。

我设法为两个域 ( domain1.com 和 domain2.com ) 配置了 apache。第一个域的 docroot 指向 /var/www/html/vh/domain1.com 第二个域的 docroot 指向 /var/www/html/vh/domain2.com

还行吧。

问题是,我想直接在浏览器上使用 IP 访问 /var/www/html。

当我尝试这样做时,我得到了在 domain1.com 上托管的网站。

我怎样才能做到这一点??

httpd.conf 中的相关行:

ServerName 9.9.9.9:80
DocumentRoot "/var/www/html"

NameVirtualHost *:80

<VirtualHost 9.9.9.9:80>
    DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost 9.9.9.9:80>
    DocumentRoot /var/www/html/vh/domain1.com
    ServerName domain1.com
    DirectoryIndex index.php
</VirtualHost>
<VirtualHost 9.9.9.9:80>
    DocumentRoot /var/www/html/vh/domain2.com
    ServerName domain2.com
    DirectoryIndex index.php
</VirtualHost>

如果我尝试访问:

http://9.9.9.9

我得到的是 /var/www/html/vh/domain1.com 下的页面,而不是托管在 /var/www/html 上的页面

我究竟做错了什么?

提前谢谢!

答案1

您的NameVirtualHost<VirtualHost>指令必须匹配。这意味着您必须更改

NameVirtualHost *:80

NameVirtualHost 9.9.9.9:80

或者改变每一个

<VirtualHost 9.9.9.9:80>

<VirtualHost *:80>

另外,我建议默认虚拟主机使用服务器的实际主机名ServerName,而不是 IP 地址。由于它是默认主机名,因此当您仅使用 IP 地址进行连接时,它仍将是所选主机名。

答案2

您可以使用命令检查 apache 如何解释您的配置apache2ctl -S。它列出了所有 vhost 及其当前由 apache 使用的顺序。当使用 IP 地址访问服务器时默认服务器将从该列表中使用。您可能已加载其他要使用的 vhost 配置。

此外,ServerName 应该是您服务器的完全限定域名,而不是 IP 地址。要查看当前的完全限定域名,请使用hostname --fqdn

相关内容