VirtualBox NAT模式下Kubuntu LAMP服务器多虚拟主机的宿主机访问问题
VirtualBox NAT模式下Kubuntu LAMP服务器多虚拟主机的宿主机访问问题
嘿,这个问题我之前也碰到过!核心原因是NAT模式下的端口转发和Apache虚拟主机的匹配逻辑没对上——你直接用127.0.0.1:8080访问时,浏览器发送的Host头是127.0.0.1,Apache会默认匹配第一个配置的虚拟主机(也就是你的site1),所以site2就访问不到。下面给你几个简单可行的解决方案:
方案一:给每个虚拟主机单独配置端口转发(最直接)
这个方法不用改Apache的配置,只需要在VirtualBox和宿主机Hosts里做调整:
- 打开VirtualBox,选中你的Kubuntu虚拟机,点击「设置」→「网络」→「高级」→「端口转发」
- 除了原来的8080→80的规则(对应site1),再添加一条新规则:
- 主机端口:填一个没被占用的端口,比如
8081 - 子系统端口:填
80(因为虚拟机里的Apache还是监听80端口) - 协议:选择
TCP
- 主机端口:填一个没被占用的端口,比如
- 修改宿主机的Hosts文件:
- Windows路径:
C:\Windows\System32\drivers\etc\hosts(需要管理员权限编辑) - macOS/Linux路径:
/etc/hosts(用sudo编辑)
添加两行内容:
127.0.0.1 site1.local 127.0.0.1 site2.local - Windows路径:
- 现在在宿主机浏览器里分别访问:
- site1:
site1.local:8080 - site2:
site2.local:8081
这样每个域名对应不同的转发端口,Apache能拿到正确的Host头,就能匹配对应的虚拟主机了。
- site1:
方案二:让Apache的虚拟主机监听不同端口(适合不想开太多转发端口的情况)
如果不想给每个站点单独开宿主机端口,可以让虚拟机里的Apache给每个虚拟主机分配不同的监听端口:
- 编辑site2的虚拟主机配置文件
site2.conf:
把原来的sudo nano /etc/apache2/sites-available/site2.conf<VirtualHost *:80>改成<VirtualHost *:81>,其他配置(比如DocumentRoot、Directory)保持不变,修改后大概是这样:<VirtualHost *:81> ServerName site2.local DocumentRoot /var/www/site2 <Directory /var/www/site2> AllowOverride All Require all granted </Directory> # 其他日志等配置... </VirtualHost> - 编辑Apache的端口配置文件
ports.conf:
添加一行sudo nano /etc/apache2/ports.confListen 81,和原来的Listen 80放在一起:Listen 80 Listen 81 - 重启Apache服务使配置生效:
sudo systemctl restart apache2 - 回到VirtualBox的端口转发设置,添加一条新规则:主机端口
8081,子系统端口81,协议TCP - 同样修改宿主机Hosts文件添加
127.0.0.1 site2.local,然后在宿主机浏览器访问site2.local:8081就能打开site2了。
注意事项
- 修改Hosts文件后,可能需要清空浏览器缓存或者重启浏览器才能生效
- 要确保你选的宿主机端口没有被其他程序占用(比如8080、8081这些常用端口,要是被占用就换个别的,比如8090、8091)
- 每次修改Apache配置后,一定要重启服务,否则配置不会生效
备注:内容来源于stack exchange,提问作者Gaëtan BILLON
相关产品推荐
相关产品推荐

