| 2025-03-16
ngrok 可以用来连接服务器,它能够帮助我们将本地服务暴露到公网,进而实现与远程服务器之间的连接和交互。在很多场景下,这种连接方式非常有用,比如在本地开发过程中,需要让远程服务器能够访问到本地运行的服务进行测试或协作。
1、ngrok 连接服务器的原理:ngrok 的工作原理基于隧道技术。当我们在本地启动 ngrok 并指定要映射的本地端口时,ngrok 客户端会与 ngrok 的云端服务器建立连接。ngrok 的云端服务器位于公网上,它会为本地服务分配一个公共的 URL,例如http://abcd1234.ngrok.io。任何外部对该 URL 的请求,都会被 ngrok 云端服务器接收,并通过建立的隧道转发到本地指定端口的服务上。同样,当本地服务有响应时,响应数据会通过隧道返回给 ngrok 云端服务器,再由服务器返回给发起请求的外部客户端。在连接服务器的场景中,远程服务器就相当于这个外部客户端,通过访问 ngrok 分配的公网 URL,就可以访问到本地运行的服务,从而实现本地与服务器之间的连接。
2、使用 ngrok 连接服务器的步骤
-安装和配置 ngrok:首先,前往 ngrok 官网(https://ngrok.com/)下载适用于本地系统(如 Windows、Linux、Mac 等)的 ngrok 安装包。下载完成后,解压文件。然后,在 ngrok 官网注册账号并登录,获取 Authtoken。将 Authtoken 配置到 ngrok 的配置文件(一般为 ngrok.yml)中,配置格式如下:
authtoken: <你获取的Authtoken>
-启动 ngrok 并映射端口:假设本地有一个服务运行在 8080 端口,我们希望通过 ngrok 让远程服务器能够访问到这个服务。以管理员身份打开命令提示符(在 Windows 系统下)或终端(在 Linux 和 Mac 系统下),切换到 ngrok 所在的目录。然后输入启动命令:“ngrok http 8080”。执行该命令后,ngrok 会开始工作,并在命令行中显示相关信息,其中包括 “Forwarding” 字段,后面跟着的就是 ngrok 为本地服务生成的公网可访问地址,例如 “Forwarding https://xxxxxx.ngrok.io -> http://localhost:8080”。
-在服务器端访问:在远程服务器上,使用浏览器或其他工具(如 curl 命令行工具)访问 ngrok 生成的公网地址。例如,如果使用浏览器,直接在地址栏中输入 “https://xxxxxx.ngrok.io”,服务器就可以访问到本地运行在 8080 端口的服务。如果使用 curl 工具,在服务器的终端中输入 “curl https://xxxxxx.ngrok.io”,即可获取本地服务返回的内容。
3、注意事项
-网络限制:由于 ngrok 需要与公网服务器建立连接,某些网络环境可能会对其进行限制,如公司或学校的网络可能禁止访问特定的端口或域名。在这种情况下,需要检查网络设置或联系网络管理员,确保 ngrok 的流量能够正常通过。或者尝试使用代理服务器来绕过网络限制。
-安全性:虽然 ngrok 在数据传输过程中提供了一定的加密机制(如使用 HTTPS 协议),但将本地服务暴露到公网仍存在一定的安全风险。因此,要确保本地服务本身有足够的安全防护措施,如设置访问权限、进行身份验证等。同时,不要随意将敏感信息通过 ngrok 暴露到公网。
-稳定性:免费版的 ngrok 可能存在连接不稳定的情况,尤其是在使用高峰期。如果对连接稳定性要求较高,建议考虑使用付费版 ngrok 或其他专业的内网穿透服务。付费版通常提供更稳定的连接、更高的带宽和更多的功能,能够满足对稳定性和性能有较高要求的场景。
4、应用场景举例
-Web 应用开发与测试:在本地开发 Web 应用时,开发人员可以使用 ngrok 将本地运行的 Web 服务暴露到公网,方便远程的测试人员、合作伙伴或团队成员在不同地点进行测试和反馈。例如,开发一个基于 Node.js 的 Web 应用,运行在本地的 3000 端口,通过 ngrok 映射后,远程服务器上的测试人员可以直接访问 ngrok 生成的公网地址,对应用的功能进行测试,查看页面展示是否正常、交互是否流畅等。
-API 开发与调试:当开发 API 接口时,需要让远程服务器能够访问到本地开发的 API 进行调试和对接。使用 ngrok 将本地 API 服务映射到公网,远程服务器可以通过访问 ngrok 生成的地址来调用 API 接口,检查接口返回的数据是否正确,验证接口的功能是否符合预期。这样可以大大提高 API 开发和调试的效率,避免了频繁将代码部署到正式服务器上进行测试的繁琐过程。
拓展阅读:
-什么是隧道技术:隧道技术是一种借助互联网络的基础设施,在不同网络之间传递数据的方式。它将一种网络协议(如 IP 协议)封装在另一种网络协议(如 UDP 协议)中进行传输,如同在两个网络之间构建了一条 “隧道”,使得原本无法直接通信的网络能够实现数据传输 。
-如何保障本地服务在公网暴露后的安全:可以设置复杂且高强度的访问密码,定期更新服务程序以修复安全漏洞,启用防火墙对进出流量进行严格过滤,采用加密算法对传输数据进行加密等,以此增强本地服务在公网暴露后的安全性 。
-除 ngrok 外还有哪些常用的内网穿透工具:frp 是一款开源的内网穿透工具,支持多种协议,配置灵活;花生壳也是常用的内网穿透软件,操作相对简单,在国内有一定的用户基础;nps 同样具备内网穿透功能,并且在性能和功能拓展方面有不错的表现 。