Windows 10下Vagrant Box代理连接及站点访问问题排查
无法访问Vagrant虚拟机上的本地站点?这里是排查和修复方案
刚接触Vagrant和PuPHPet遇到这种问题很常见,咱们一步步来排查:
1. 先确认本地与虚拟机的目录同步是否正确
从你的config.yaml可以看到:
- 本地
C:/Users/My Name/Documents/www被同步到虚拟机的/var/www - Apache的虚拟主机文档根目录是
/var/www/mysite
这意味着你本地的www文件夹下必须有mysite子文件夹,里面要放你的站点文件(比如index.php或index.html)。
SSH进入虚拟机后,执行以下命令验证:
# 检查目录是否存在且有内容 ls -la /var/www/mysite # 检查目录权限(Apache运行用户是www-data) ls -ld /var/www/mysite
如果目录不存在,先在本地创建mysite文件夹并放入站点文件,然后重新同步:vagrant reload --provision;如果权限不对,执行:
sudo chown -R www-data:www-data /var/www/mysite
或者直接修改config.yaml中synced_folder的owner和group为www-data,再重新执行provision。
2. 验证虚拟机内部是否能正常访问站点
如果目录没问题,先在虚拟机内部测试Apache是否正常工作:
# 测试访问localhost curl http://localhost # 测试访问虚拟机IP curl http://10.1.0.82
如果curl返回站点内容,说明Apache配置没问题,问题出在宿主机到虚拟机的网络;如果返回错误:
- 检查Apache服务状态:
sudo systemctl status apache2,确保服务正在运行 - 查看Apache错误日志找线索:
sudo tail -f /var/log/apache2/error.log - 重启Apache加载最新配置:
sudo systemctl restart apache2
3. 排查宿主机到虚拟机的网络连通性
先测试IP连通性
在宿主机的命令行执行:
ping 10.1.0.82
如果ping不通:
- 打开VirtualBox,查看虚拟机的网络适配器设置,确认是Host-Only Adapter模式,且IP地址为
10.1.0.82 - 或者暂时把
config.yaml中的private_network改成dhcp,执行vagrant reload后,用vagrant ssh进入虚拟机,通过ip addr查看实际分配的IP,再更新宿主机的hosts文件
检查端口是否被防火墙拦截
如果ping通但浏览器访问不了:
- 虚拟机中你开启了防火墙(
firewall: install: '1'),但没有开放80端口,执行:
sudo ufw allow 80 sudo ufw reload
- 暂时关闭宿主机的防火墙(Windows Defender防火墙或第三方防火墙),测试是否能访问
4. 检查代理配置是否干扰
你的config.yaml中Vagrant部分配置了全局代理,且处于启用状态:
proxy: http: 'http://192.168.0.2:3128' https: 'http://192.168.0.2:3128' ftp: 'http://192.168.0.2:3128' enabled: '1'
如果宿主机不需要代理,或者虚拟机访问外部网络不需要代理,建议把enabled改成'0',然后执行vagrant reload,避免代理设置干扰本地站点的访问。
最后验证hosts配置
确保宿主机的hosts文件(Windows是C:\Windows\System32\drivers\etc\hosts)条目正确:
10.1.0.82 mysite.test www.mysite.test
修改后记得保存,然后清空浏览器缓存或者用无痕模式重新访问mysite.test。
内容的提问来源于stack exchange,提问作者Gerico




