如果我请求与服务器主机名相同的域,为什么 apache2 会使用默认 vhost,我该如何防止这种情况?

如果我请求与服务器主机名相同的域,为什么 apache2 会使用默认 vhost,我该如何防止这种情况?

我有一个网站,希望能够http://mydomain.com使用http://www.mydomain.com

最近我将我的服务器配置hostnamemydomain.com

我已经从 ubuntu 12.04 存储库默认安装了 apache2,并在其下配置了以下配置文件/etc/apache2/sites-enabled/mydomain.com

<VirtualHost *:80>
        ServerName mydomain.de
        ServerAlias     www.mydomain.de
        DocumentRoot /home/mydomain/public
</VirtualHost>
<Directory /home/mydomain/public>
        AllowOverride All
</Directory>

现在如果我请求http://www.mydomain.com一切都正常,但如果我请求http://www.mydomain.com我会得到默认的“它正常”的 apache 欢迎页面。

如果我以某种方式在配置文件中添加前缀,使其在 vhost 之前列出000-default,那么它看起来像这样:

ls -lha /etc/apache2/sites-enabled/
total 8.0K
drwxr-xr-x 2 root root 4.0K Jul  6 18:46 .
drwxr-xr-x 7 root root 4.0K Oct  5  2012 ..
lrwxrwxrwx 1 root root   33 Jul  6 18:45 000-0mydomain -> /home/mydomain/apache2.conf
lrwxrwxrwx 1 root root   26 Jul  6 18:29 000-default -> ../sites-available/default

它确实有效。

但是我不知道这是否是个好主意,也不知道为什么会出现这种情况。当服务器主机名与域名不对应时,它也会起作用!

我认为 apache 无法区分没有主机头的请求和带有与主机名相同的主机头的请求...

那么我该怎么办呢?我该如何正确地做到这一点?

我认为调整名称以便我的 vhost ocmes eben 在默认值之前(未命名)000-default只是为了惹恼人们不是一个好主意......

答案1

当您输入 时hostname -f,这也是您的域名吗?我认为默认虚拟主机正在响应机器域名。我的建议是为机器设置一个不同的主机名,因为您用来管理它的名称应该与在其上运行的网站不同。否则,您将无法执行诸如为网站提供临时的不同地址并显示维护消息之类的操作。

如果您不想这样做,您可以在 000-default 中配置一个虚拟的 ServerName。

相关内容