ngrok:Node.js 本地隧道工具

ngrok 是一个 Node.js 封装库,用于调用 ngrok 客户端创建本地隧道。该项目在 GitHub 上获得了 2,418 个 Star。

正文顶部截图

ngrok 的作用是将本地运行的服务暴露到公网,方便测试和调试。比如本地开发了一个 Web 服务,端口是 8080,通过 ngrok 可以获得一个公网 URL,其他人可以通过这个 URL 访问你的本地服务。

这个库的第 5 版使用 ngrok 客户端第 3 版。如果需要使用 ngrok 客户端第 2 版,应该使用这个库的第 4 版。

安装

通过 npm 安装:

npm install ngrok

安装完成后,在代码中引入并使用:

const ngrok = require('ngrok');
(async function() {
  const url = await ngrok.connect();
})();

默认情况下,connect 方法会创建一个 HTTP 隧道,指向本地 80 端口。也可以指定端口:

const url = await ngrok.connect(9090);

还可以传入选项对象,配置更多参数:

const url = await ngrok.connect({
  proto: 'http',
  addr: 8080,
  basic_auth: 'user:pwd',
  subdomain: 'alex',
  authtoken: '12345',
  region: 'us',
});

支持的协议包括 HTTP、TCP 和 TLS。可以通过 subdomain 参数设置自定义子域名,通过 region 参数选择服务器区域(us、eu、au、ap、sa、jp、in)。

认证

基本的 HTTP/HTTPS/TCP 隧道不需要认证令牌。如果需要自定义子域名等高级功能,需要在 ngrok.com 注册账号获取 authtoken,并通过以下方式设置:

await ngrok.authtoken(token);

或者在连接时传入:

await ngrok.connect({authtoken: token});

断开连接

ngrok 进程会在 Node.js 进程结束时自动关闭。也可以手动断开:

await ngrok.disconnect(url); // 断开指定隧道
await ngrok.disconnect(); // 断开所有隧道
await ngrok.kill(); // 终止 ngrok 进程

API 管理

ngrok 提供了一个 API 客户端,可以管理隧道和请求:

const api = ngrok.getApi();
const tunnels = await api.listTunnels();
const tunnel = await api.startTunnel(opts);
await api.stopTunnel(tunnelName);

还可以查看和重放请求:

await api.listRequests(options);
await api.replayRequest(requestId, tunnelName);
await api.deleteAllRequests();

配置文件

ngrok 支持使用配置文件存储隧道选项。配置文件的默认位置因操作系统而异:

系统 路径
MacOS ~/Library/Application Support/ngrok/ngrok.yml
Linux ~/.config/ngrok/ngrok.yml
Windows %HOMEPATH%\AppData\Local\ngrok\ngrok.yml

可以通过 configPath 参数指定自定义配置文件路径。

静态免费域名

2023 年 4 月,ngrok 推出了静态免费域名功能,即使是免费账号也可以获得固定的子域名。使用方法:

ngrok.connect({
  domain: "xxx.ngrok-free.app",
  authtoken: "YOUR-AUTH-TOKEN"
})

注意:subdomaindomain 参数不能同时使用,否则只会生效 subdomain

代理设置

如果在企业代理环境下安装遇到问题,可以设置 HTTPS_PROXY 环境变量。需要安装 hpagent 模块作为依赖。

如果使用 CA 文件,可以通过 NGROK_ROOT_CA_PATH 环境变量指定路径。

README区域截图

环境变量。需要安装hpagent` 模块作为依赖。

如果使用 CA 文件,可以通过 NGROK_ROOT_CA_PATH 环境变量指定路径。

[外链图片转存中…(img-3q2FIe3N-1782799517717)]

更多推荐