25

这可能已经被问过了,但我找不到直接的答案,或者我发现的那些不起作用。

我有一个域mydomain.com,解析为 IP;我们称之为 8.8.8.8。DNS 设置还将两个子域指向具有 A 记录的该 IP 地址。它们是dev.mydomain.comstaging.mydomain.com。两者都有指向 8.8.8.8 的 A 记录。

在服务器(8.8.8.8)上,我有两个虚拟主机文件。这些如下:

staging.mydomain.com.conf

<VirtualHost *:80>
    ServerName  staging.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/staging/
</VirtualHost>

和...

dev.mydomain.com.conf

<VirtualHost *:80>
    ServerName  dev.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/dev/
</VirtualHost>

问题是:

无论我访问http://staging.mydomain.com还是http://dev.mydomain.com,我总是登陆staging.mydomain.com(Apache 提供这些文件)。

我已经重新启动了 Apache 甚至服务器。如果我更改 .conf 文件的顺序以使 dev 排在第一位,我总是会看到。任何建议将不胜感激。谢谢!


更新

我发现自己又回到了这个问题!如果你知道你的语法是正确的,你可能有一个错误的符号链接。删除它并重新创建,中间重新启动 apache。我只是这样做了,它解决了几个小时令人头疼的问题。在CentOS你可以检查你可用的虚拟主机httpd -S

更新 2

当虚拟主机的 apache日志文件不存在或不可写时,我还发现存在此问题。

4

1 回答 1

31

听起来您需要在配置中添加NameVirtualHost指令

NameVirtualHost         *:80

在某些情况下,Apache 可能无法*:80正确处理 VirtualHost。在这些情况下,您应该将 VirtualHosts 直接映射到特定 IP。

NameVirtualHost         8.8.8.8:80

<VirtualHost 8.8.8.8:80>
    ServerName  staging.mydomain.com
    ServerAlias stage.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/staging/
</VirtualHost>

<VirtualHost 8.8.8.8:80>
    ServerName  dev.mydomain.com
    ServerAlias development.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/dev/
</VirtualHost>

您还可以运行apachectl -t -D DUMP_VHOSTS以查看 Apache 如何解析 VirtualHost 配置。

更新:正如评论中提到的,通常你可以只使用NameVirtualHost *:80. 所以大多数时候你可以如下配置虚拟主机。

NameVirtualHost         *:80

<VirtualHost *:80>
    ServerName  staging.mydomain.com
    ServerAlias stage.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/staging/
</VirtualHost>

<VirtualHost *:80>
    ServerName  dev.mydomain.com
    ServerAlias development.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/dev/
</VirtualHost>
于 2012-12-12T11:27:51.337 回答