具有一个IP地址的Apache多子域

时间:2012-12-12 10:44:21

标签: apache subdomain vhosts

可能有人问过,但我找不到直接答案,或者我找不到的答案。

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

在服务器(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 log 文件不存在或不可写时,我也发现存在此问题。

1 个答案:

答案 0 :(得分:26)

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

NameVirtualHost         *:80

在某些情况下,Apache可能无法正确处理*:80 VirtualHosts。在这些情况下,您应该将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>