我有一个在 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
。