一个IP地址的Apache多个子域如何实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (27)

我有一个域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是第一个。

提问于
用户回答回答于

听起来像你需要添加NameVirtualHost指令到你的配置。

NameVirtualHost         *:80

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

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>

扫码关注云+社区

领取腾讯云代金券