内网穿透神器 Ngrok 的使用
Ngrok 是一个反向代理软件,启动后会在公共服务器和本地客户端之间建立一个通道,并由公共服务器分配一个唯一的域名给这个通道。在 Homestead 中运行 Ngrok 之后,通过公共服务器分配的域名就可以在公网访问到 Homestead 中的站点,从而让支付宝和微信支付的服务器直接将回调数据发送到对应的回调接口。
注册 Ngrok 账号
Ngrok 官方提供了免费的公共服务器,但需要注册才能使用,访问这个 链接 注册。
Ps: 可以点击注册页面下方的 Github 注册按钮,可以直接注册成功。
Homestead 配置 Ngrok 客户端
Homestead 中内置了 Ngrok 客户端,但需要配置 Token 之后才能正常使用。
Ngrok 注册完成之后会进入这个页面:
复制这个框里的命令,但不需要开头的 ./,然后在 Homestead 中粘贴执行:
ngrok authtoken {你的 Token}
启动 Ngrok 客户端
接下来我们需要在 Homestead 中启动 Ngrok 客户端以建立本地与公共服务器的链接:
ngrok http -host-header=shop.test -region us 80
http
代表我们要映射的是 HTTP 协议;-host-header=
代表本地站点的域名,如果你用的不是 shop.test
请更换成对应的域名;-region us
代表我们要使用的是美国的公共节点;80
代表映射到 Homestead 的 80 端口。
运行之后应该可以看到如下界面:
Forwarding
代表 Ngrok 分配给你的域名,对于免费账号来说,每次启动 Ngrok ,都会重新分配一个随机的域名,无法固定。
Web Interface
是 Ngrok 内置的一个管理面板,它可以展示所有通过 Ngrok 进来的请求信息以及返回的数据,现在我们可以访问一下 http://192.168.10.10:4040 看看。
在 Laravel Shop 中使用
接下来我们来调整一下我们的代码。
首先我们把 Ngrok 分配的随机域名放到 .env
文件中:
.env
.
.
.
NGROK_URL=http://{分配给你的域名}.ngrok.io
然后在配置文件中读取:
config/app.php
.
.
.
'ngrok_url' => env('NGROK_URL'),
];
为了方便调用,我们在 helpers.php 中新建一个函数:
bootstrap/helpers.php
.
.
.
function ngrok_url($routeName, $parameters = [])
{
// 开发环境,并且配置了 NGROK_URL
if(app()->environment('local') && $url = config('app.ngrok_url')) {
// route() 函数第三个参数代表是否绝对路径
return $url.route($routeName, $parameters, false);
}
return route($routeName, $parameters);
}
现在可以直接在需要的地方调用即可,如:ngrok_url(‘products.index’)。’products.index’ 为路由名称。
本文只是为了学习和方便查找而做的记录。
本作品采用《CC 协议》,转载必须注明作者和本文链接
因为ngrok在国外,所以使用的时候经常无法访问,我搜索了解到国内也有类似实现内网穿透到工具和软件,我推荐大家可以看一下 飞鸽内网穿透 fgnwct.com 主要是他们提供的免费的服务器可以直接进行使用。大家可以试试。
ngrok和frp开源内网穿透适合自己公网IP主机搭建。 无公网IP操作简单点的一般用nat123或花生壳或类似网络映射工具,直接将内网IP端口映射到域名上,提供互联网服务。