| 2025-03-18
ngrok 并非只能访问一个端口,它具备强大的能力,可以同时对多个端口进行内网穿透,满足多样化的应用场景需求。
在基础使用场景中,当我们启动 ngrok 客户端时,若仅需将本地的单个服务端口暴露到公网,例如本地运行的一个 Web 服务监听在 8080 端口,执行 “ngrok http 8080” 命令,ngrok 会为该端口创建一条隧道,生成一个公网 URL,通过这个 URL 就能访问到本地 8080 端口的 Web 服务。但实际应用中,我们可能存在多个服务需要同时被公网访问的情况。
假设在本地开发环境中,不仅有 Web 服务监听在 8080 端口,还同时运行着一个数据库管理工具,监听在 8081 端口,并且希望两者都能通过公网访问。此时,ngrok 提供了多种解决方案。一种方式是分别启动两个 ngrok 客户端进程。先执行 “ngrok http 8080”,为 Web 服务创建隧道;再另外打开一个命令行窗口,执行 “ngrok http 8081”,为数据库管理工具创建隧道。这样,ngrok 会为两个端口分别生成不同的公网 URL,通过各自的 URL 就能访问对应的本地服务。
另一种更为便捷且适用于复杂场景的方式,是利用 ngrok 的配置文件。首先,创建一个配置文件,例如命名为 “ngrok.cfg”。在配置文件中,可以进行如下配置:
tunnels:
web:
addr: 8080
proto: http
db:
addr: 8081
proto: http
上述配置中,定义了两个隧道,“web” 隧道对应本地 8080 端口的 Web 服务,“db” 隧道对应本地 8081 端口的数据库管理工具,并且都使用 HTTP 协议。保存配置文件后,执行 “ngrok -config=ngrok.cfg start web db” 命令,ngrok 会依据配置文件,同时为两个端口创建隧道,并生成相应的公网 URL。
在一些特殊应用场景中,还可能涉及到不同协议端口的穿透。比如,本地除了有 Web 服务(HTTP 协议),还有一个基于 TCP 协议的游戏服务器监听在 5000 端口。同样可以在配置文件中进行如下配置:
tunnels:
web:
addr: 8080
proto: http
game:
addr: 5000
proto: tcp
然后执行 “ngrok -config=ngrok.cfg start web game”,ngrok 会为 8080 端口的 Web 服务和 5000 端口的游戏服务器分别创建隧道,前者通过 HTTP 协议访问,后者通过 TCP 协议访问,极大地拓展了内网穿透的应用范围。
拓展阅读
1.ngrok 配置文件还支持哪些高级设置:ngrok 配置文件可设置连接超时时间,如connect_timeout: 5s,控制客户端连接服务器的最长等待时长;还能配置日志级别,像log_level: debug,方便排查问题时获取更详细的日志信息;此外,可指定代理服务器,通过http_proxy: "http://proxy.example.com:8080"设置,以适应特殊网络环境。
2.TCP 与 HTTP 协议在 ngrok 中的应用差异:HTTP 协议常用于 Web 服务,它基于请求 - 响应模式,适用于传输网页等文本类数据,ngrok 用它穿透 Web 服务时,会自动处理 HTTP 相关的头信息等内容。而 TCP 协议更通用,适用于各类基于字节流传输的应用,如游戏服务器、SSH 服务等。在 ngrok 中,用 TCP 穿透时,更侧重于保障数据的可靠传输,不涉及 HTTP 协议的复杂头部处理。
3.如何在 Windows 系统中管理多个 ngrok 客户端进程:可借助任务管理器,在 “进程” 选项卡中找到 ngrok 进程,若要结束某个进程,选中后点击 “结束任务”。也可以使用命令行工具,如taskkill /F /IM ngrok.exe命令可强制结束 ngrok 进程。若要启动多个进程,除了在不同命令行窗口操作,还可编写批处理文件,如start ngrok http 8080 start ngrok http 8081,将这两条命令保存为.bat文件,运行该文件就能同时启动两个 ngrok 进程。