Laradock本地开发:如何结合hosts文件使用ngrok?
你碰到的Failed to complete tunnel connection报错,核心原因是ngrok和Laradock的Nginx服务之间的主机头匹配或者端口映射没对齐——毕竟你的site.test本地能正常访问,说明本地服务本身是没问题的,咱们从这几个方向排查:
确认Laradock Nginx的端口映射是否正确
Laradock默认会把容器内Nginx的80端口映射到主机的80端口,但如果你的docker-compose.yml里修改过端口配置(比如改成了8080),那ngrok命令里的端口就得同步调整。比如主机访问site.test用的是http://site.test:8080,那命令应该改成:ngrok http -host-header=site.test 8080你可以先查看Laradock根目录下的
docker-compose.yml里Nginx服务的ports字段,确认主机侧的端口号。检查Nginx站点配置的server_name是否匹配
进入Laradock的Nginx容器,找到site.test对应的配置文件(通常在/var/www/nginx/sites/site.test.conf),确认server_name字段的值是site.test,不能有拼写错误或者额外的后缀(比如.local)。如果这里不匹配,ngrok携带的主机头就无法被Nginx识别,导致连接失败。
进入容器的命令参考:docker exec -it laradock_nginx_1 bash尝试使用rewrite模式的主机头参数
有时候单纯指定-host-header=site.test可能会有头信息转发的问题,换成--host-header=rewrite site.test参数,强制重写请求的主机头,命令调整为:ngrok http --host-header=rewrite site.test 80(同样,端口号根据你的实际映射情况调整)
排查本地防火墙或网络环境干扰
虽然site.test能本地访问,但防火墙可能拦截了ngrok的代理请求。可以临时关闭本地防火墙测试,或者在防火墙规则里允许ngrok访问对应端口。另外,如果是在公司内网,可能存在代理或网关限制,切换到手机热点试试能不能正常建立隧道。更新ngrok到最新版本
旧版本的ngrok可能存在兼容性问题,下载最新版替换现有版本,再重新执行命令试试。
内容的提问来源于stack exchange,提问作者Mick

