可能有人问过,但我找不到直接答案,或者我找不到的答案。
我有一个域 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
当虚拟主机的apache log 文件不存在或不可写时,我也发现存在此问题。
答案 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>