正常情况下,hugo 框架使用 hugo server
命令生成本地网络服务,并在 localhost:1313
下进行资源访问。我的 hugo 安装 WSL2 环境中,按照上述方法访问本地网络服务没有任何问题。但在一次重启后,Windows 浏览器访问 WSL2 上部署的 hugo 网络服务失败,显示 localhost 已拒绝连接。
。
网上一些资料说 WSL2 是一个虚拟环境,不能直接访问[1],资料给出的方案多半也是查询 ip 并直接访问 ip:端口
。
由于 WSL2 的 ip 是虚拟的,可能会变化,还需要写一个脚本获取 ip 以避免麻烦,我根据网上资料给出的解决方案也的确成功解决了问题。
但这种解决方案会导致在 vs code 终端中打开网络服务时因为 ip 变化而反复出现弹窗提示,这让我觉得有些难受。
此外网络上也有资料说可以使用 localhost:端口号
的方式访问 WSL2 部署的网络服务[2],且我成功利用过这种方式访问过 WSL2 上部署的 hugo 服务。
所以我猜想可能是端口出现了问题,便尝试更换 hugo 的服务端口,果然成功利用 localhost:其他端口
打开 WSL2 上部署的 hugo 网络服务。
这下便找到了 WSL2 部署的网络服务突然不能访问 localhost 的真正原因,Windows 系统下的部分端口被占用了!
通过 netstat -aon|findstr "1313"
命令却发现并没有程序占用 1313 端口,但即使端口没有被占用,也可能是被系统保留(如: Hyper-V)从而不能访问。
于是使用 netsh interface ipv4 show excludedportrange protocol=tcp
检查 1313 端口是否在被保留,结果发现我们需要的 1313 端口的确被保留。
先暂时关闭 Hyper-V,然后使用 netsh int ipv4 add excludedportrange protocol=tcp startport=1313 numberofports=1
命令释放 1313 端口,最后重启 Hyper-V 便可以再次访问 localhost:1313
。