VirtualBox Ubuntu客户机配置多子域名后无法在宿主机正常访问的问题求助
看起来你已经把Apache虚拟主机和VirtualBox端口转发的基础框架搭起来了,只是在域名解析和访问方式上踩了两个小坑,我帮你一步步梳理解决:
一、修正宿主机的hosts文件配置
你之前在hosts里写127.0.0.1:8000 website.com是错误的——hosts文件只负责域名到IP的映射,不支持带端口号。正确的做法是在宿主机的hosts文件(Windows是C:\Windows\System32\drivers\etc\hosts,Linux/macOS是/etc/hosts)里添加以下内容:
127.0.0.1 test.website.com 127.0.0.1 live.website.com 127.0.0.1 website.com
保存后,宿主机就能把这几个域名解析到本地IP了。
二、用正确的URL访问子域名
因为你在VirtualBox里做的是宿主机8000端口转发到客户机80端口,所以访问的时候必须带上8000端口号,否则浏览器会默认用80端口,找不到对应的服务。正确的访问地址应该是:
- 测试站点:
test.website.com:8000 - 正式站点:
live.website.com:8000
三、确保客户机的虚拟主机目录权限正确
你已经配置了DocumentRoot,但要确保这两个目录存在且Apache有访问权限:
# 创建目录 sudo mkdir -p /var/www/html/test /var/www/html/live # 设置权限给Apache运行用户www-data sudo chown -R www-data:www-data /var/www/html/test /var/www/html/live sudo chmod -R 755 /var/www/html/test /var/www/html/live
可以在两个目录下分别创建测试文件验证:
比如在/var/www/html/test/index.html里写:
<h1>Test Website</h1>
在/var/www/html/live/index.html里写:
<h1>Live Website</h1>
四、重新加载Apache配置
最后重新加载Apache让配置生效(不用重启,重载更轻量):
sudo systemctl reload apache2
为什么之前的访问会出问题?
- hosts带端口:hosts文件不识别端口,所以你之前的配置无法让test.website.com解析到本地,浏览器自然提示“Server not found”。
- 访问localhost子域名跳转到test站点:Apache会把虚拟主机配置里第一个定义的站点作为默认站点,当你访问test.localhost:8000时,这个域名不匹配任何VirtualHost的ServerName,Apache就会返回第一个默认站点(也就是test.website.com)的内容。
如果不想用自定义的website.com域名,也可以直接用localhost的子域名,比如把VirtualHost的ServerName改成test.localhost和live.localhost,然后在宿主机hosts里添加127.0.0.1 test.localhost live.localhost,这样访问test.localhost:8000和live.localhost:8000也能正常工作。
备注:内容来源于stack exchange,提问作者xdobx

