ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名

news/2024/9/17 8:46:09/ 标签: https, 智能路由器, 网络

前言

当我们需要把本地开发的应用展示给外部用户时,常常会因为无法直接访问而陷入困境。

就为了展示一下,买服务、域名,搭环境,费钱又费事。

那有没有办法,让客户直接访问自己本机开发的应用呢?

这种需求场景这么多,当然有现成的技术 —— 内网穿透。

什么是内网穿透?

内网穿透是一种网络技术,它允许外部互联网用户访问部署在本地网络(内网)中的服务或设备。

通常,家庭或企业网络都位于内网,连接到外部互联网需要通过 NAT(网络地址转换)或者路由器来实现。

然而,由于内网中设备的 IP 地址通常是私有的,外部用户无法直接访问这些设备,这就带来了两个主要挑战:

  1. NAT 问题:内网设备的私有 IP 地址无法直接在互联网中使用,需要通过路由器将外部请求转发到内网设备。

  2. 动态 IP 地址:即使能够实现 NAT 转发,本地网络中的 IP 地址可能是动态的,每次重启设备时会发生变化,增加了管理和访问的复杂性。

常见的内网穿透解决方案

  1. 端口映射:通过在路由器上进行端口映射,将外部流量定向到内网中的特定设备。这种方法虽然可行,但通常需要配置路由器并且涉及安全风险,操作复杂。

  2. 第三方穿透工具:如 ngrok、frp 等工具通过云中转服务器,将本地服务映射到外部可访问的 URL,从而解决了复杂的端口映射问题。

反向代理技术

反向代理是内网穿透的核心技术之一。

反向代理服务器位于用户和内部服务器之间,接收外部请求后,将请求转发到内部服务器,再将响应返回给外部用户。

通过这种方式,反向代理隐藏了内部服务器的实际位置和架构,确保了内部网络的安全性。

现在,我们已经理解了内网穿透和反向代理的基础知识,接下来我将介绍一个强大的工具——ngrok,它能让内网穿透变得简单高效。

什么是 ngrok?

ngrok 是一个反向代理工具,它通过建立隧道,把你本地的服务映射到一个外部可访问的 URL。ngrok 通过其强大的功能,解决了传统内网穿透方式的复杂性和安全性问题。

通过 ngrok,开发者可以将本地运行的 HTTP 或 TCP 服务映射到一个公网可访问的 URL,从而让远程用户通过这个 URL 访问到本地服务。

ngrok 的主要功能

  1. HTTPS 支持:ngrok 自动为你的本地服务生成 HTTPS URL,确保数据传输的安全性。
  2. 自定义域名和子域名:ngrok 支持绑定自定义域名或为你的服务生成静态子域名,确保 URL 不会频繁更换。
  3. 数据分析:ngrok 提供实时流量数据分析,帮助你监控每一个请求和响应,快速发现问题。
  4. 隧道管理:可以轻松管理和查看正在运行的隧道,支持多个隧道同时运行。
  5. 多协议支持:除了 HTTP/HTTPS,ngrok 还支持 TCP 和其他协议的映射。
  6. 国内可用:这一点,遇到过相关问题的人,算是发现救星了~

如何使用 ngrok

接下来我们来实际操作,看看 ngrok 是如何工作的。

假设你在本地运行了一个 Web 应用,监听的端口号为 80,我们可以通过以下几步将它暴露到互联网。

第一步:下载并安装 ngrok

访问 ngrok 官方网站,根据你的操作系统下载对应的安装包并进行安装。

  1. 对于 Windows 用户,下载后解压到一个目录,打开命令行工具,进入该目录即可使用。
  2. 对于 macOS 用户,可以通过以下命令直接安装:
    brew install ngrok/ngrok/ngrok
    

第二步:创建 ngrok 账户并获取 Authtoken

ngrok 的部分功能需要登录后才能使用。

创建账户后,你会获得一个 Authtoken,在命令行中执行以下命令,将这个 token 添加到 ngrok 中:

ngrok cofig add-authtoken <你的-token>

https://i-blog.csdnimg.cn/direct/5bf3eac6b2de4be3bad7b3b1985643aa.png" alt="在这里插入图片描述" />

第三步:启动 ngrok

假设你有一个本地的 Web 服务运行在端口 80 上,现在我们可以使用 ngrok 将其映射到公网。

在命令行中执行:

ngrok http 80

https://i-blog.csdnimg.cn/direct/bcbd069e705542bb821589811da5f9a9.png" alt="在这里插入图片描述" />

此时,ngrok 会为你生成一个公网可访问的 URL,类似于:
https://i-blog.csdnimg.cn/direct/4fc1cad339d94d428f5f9543b20d72e4.png" alt="在这里插入图片描述" />

你可以将这个 URL 发送给外部用户,他们通过访问这个地址即可访问你本地运行的应用。

第四步:监控和管理隧道

ngrok 提供了一个方便的 Web 界面,用于查看隧道的实时流量和请求详情。

你可以通过访问以下本地 URL 进行监控:

http://localhost:4041

具体端口是哪个,根据 ngrok 启动的提醒来确认:
https://i-blog.csdnimg.cn/direct/f74754e348c84fb2b13d551265443ea1.png" alt="在这里插入图片描述" />

https://i-blog.csdnimg.cn/direct/d220d699ee4b40f6bf2b842e3109843d.png" alt="在这里插入图片描述" />
在这个界面,你可以查看到每个请求的详细信息,包括请求头、响应数据等。

高级使用:使用静态子域名

我们上面的步骤,生成的公网域名,每次都会变化。
如果你不希望 ngrok 每次启动时生成随机的 URL,可以使用 ngrok 提供的静态域名。
https://i-blog.csdnimg.cn/direct/ae3169c7ae0e402b923606ee32c10da2.png" alt="在这里插入图片描述" />
如上图,使用 ngrok 提供的静态域地址映射本地端口。
https://i-blog.csdnimg.cn/direct/365025de5c57437786cdb41eea861c03.png" alt="在这里插入图片描述" />

安全提示

尽管 ngrok 使内网穿透变得简单高效,但在使用时仍需要注意以下几点:

  1. 生产环境慎用:ngrok 更适合开发和测试环境,不建议在生产环境中使用。
  2. 保护 Authtoken:不要将你的 ngrok Authtoken 泄露给他人,避免产生不必要的安全风险。
  3. 访问控制:ngrok 支持为隧道设置访问控制,确保只有授权的用户才能访问你的服务。

总结

ngrok 是一个功能强大的工具,特别适合开发者在开发和测试阶段展示和共享本地应用。

通过简单的命令,ngrok 能够快速实现内网穿透,同时支持 HTTPS、静态域名、自定义域名等高级功能。

当你下次遇到内网穿透的需求时,试试 ngrok 吧。

希望对你有帮助。


http://www.ppmy.cn/news/1522814.html

相关文章

表格多列情况下,loading不显示问题

问题描述&#xff1a; 用element plus 做得表格&#xff0c;如下图&#xff0c;列数较多&#xff0c;且部分表格内容显示比较复杂&#xff0c;数据量中等的情况下&#xff0c;有一个switch 按钮&#xff0c;切换部分列的显示和隐藏&#xff0c;会发现&#xff0c;切换为显示的时…

逻辑运算基础知识

关系运算符 <:小于 <:小于等于 >:大于 >:大于等于 以上优先级相同&#xff1a;高 &#xff1a;等于 !&#xff1a;不等于 以上优先级相同&#xff1a;低 说明&#xff1a; 关系运算符的 优先级 低于 算数运算符 关系运算符的 优先级 大于 赋值运算符 逻辑运算&a…

前向渲染路径

1、前向渲染路径处理光照的方式 前向渲染路径中会将光源分为以下3种处理方式&#xff1a; 逐像素处理&#xff08;需要高等质量处理的光&#xff09;逐顶点处理&#xff08;需要中等质量处理的光&#xff09;球谐函数&#xff08;SH&#xff09;处理&#xff08;需要低等质量…

如何使用 PHP 函数与其他 Web 服务交互?

在 PHP 中&#xff0c;我们可以使用 cURL 或者 file_get_contents 函数与其他 Web 服务进行交互。 使用 cURL 函数 cURL 是一个库&#xff0c;它允许你使用各种类型的协议来发送数据&#xff0c;并从服务器获取数据。 $curl curl_init(‘http://example.com/api’); curl_s…

SprinBoot+Vue漫画天堂网的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

前端框架有哪些?以及每种框架的详细介绍

目录 前言1. React2. Vue.js3. Angular4. Bootstrap5. Foundation总结 前言 前端框架是Web开发中不可或缺的工具&#xff0c;它们为开发者提供了丰富的工具和抽象&#xff0c;使得构建复杂的Web应用变得更加容易。当前&#xff0c;前端框架种类繁多&#xff0c;其中一些最受欢…

【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片那是获取资料的入口&#xff01; 【全网最全】2024年数学建模国赛A题30页完整建模文档17页成品论文保奖matla代码可视化图表等&#xff08;后续会更新&#xff09;「首先来看看目前已有的资料&#xff0…

应用开发“取经路”,华为应用市场送出全周期服务“助攻”

最近大量国内外玩家被西游神话圈粉&#xff0c;化身游戏人物角色&#xff0c;踏上了充满冒险的取经路。如果让莘莘学子或创业者们&#xff0c;在自己的职业生涯中&#xff0c;也选一个机遇跟挑战并存的角色&#xff0c;“开发者”一定榜上有名。 智能手机和移动互联网的普及&am…

30天pandas挑战

大的国家 挑选出符合要求的行 def big_countries(world: pd.DataFrame) -> pd.DataFrame:df world[(world[area] > 3000000) | (world[population] > 25000000)]return df[[name,population,area]] 在Pandas中&#xff0c;当你使用条件过滤时&#xff0c;应该使用 …

记一次升级 Viper、ETCD V3操作Toml

前一阵子碰到Go写的一项目&#xff0c;使用viper和ETCD进行Toml文件的存储与写入。在当我安装新版本的ETCD和升级Go依赖包之后出现了不兼容的问题。旧版viper为1.10版本&#xff0c;使用github.com/coreos/go-etcd v2.0.0incompatible 作为请求包。看了源码之后发现新的版本中废…

HashMap 底层原理解析

HashMap 是 Java 中非常常用的一个数据结构&#xff0c;它基于哈希表实现&#xff0c;提供了快速的键值对存储和检索。本文将深入探讨 HashMap 的底层实现原理&#xff0c;包括其数据结构、哈希函数、冲突解决机制以及扩容机制。 1. 哈希表基础 哈希表是一种通过哈希函数将键…

【重学 MySQL】二十、运算符的优先级

【重学 MySQL】二十、运算符的优先级 MySQL 运算符的优先级&#xff08;由高到低&#xff09;注意事项示例 在 MySQL 中&#xff0c;运算符的优先级决定了在表达式中各个运算符被计算的先后顺序。了解运算符的优先级对于编写正确且高效的 SQL 语句至关重要。以下是根据高权威性…

C++学习笔记(13)

203、文件操作-写入二进制文件 二进制文件以数据块的形式组织数据&#xff0c;把内存中的数据直接写入文件。 包含头文件&#xff1a;#include <fstream> 类&#xff1a;ofstream&#xff08;output file stream&#xff09; ofstream 打开文件的模式&#xff08;方式&am…

代理模式(权限、远程调用、延迟加载、日志和缓存)

1、权限保护代理模式 使用 代理模式 实现一个“干饭村约会系统服务”的示例&#xff0c;能够通过代理控制对实际对象&#xff08;比如用户的约会资料&#xff09;访问、保护隐私、限制不正当操作等。 需求分析&#xff1a; 用户&#xff08;Person&#xff09;&#xff1a;干…

自我指导:提升语言模型自我生成指令的能力

人工智能咨询培训老师叶梓 转载标明出处 传统的语言模型&#xff0c;尤其是经过指令微调的大型模型&#xff0c;虽然在零样本&#xff08;zero-shot&#xff09;任务泛化上表现出色&#xff0c;但它们高度依赖于人类编写的指令数据。这些数据往往数量有限、多样性不足&#xf…

uniapp+vue+ts开发中使用signalR实现客户端和服务器通讯

SignalR SignalR 面向 ES6。 对于不支持 ES6 的浏览器&#xff0c;请将库转译为 ES5。 SignalR 支持以下用于处理实时通信的技术&#xff08;按正常回退的顺序&#xff09;&#xff1a; WebSocketsServer-Sent Events长轮询SignalR 自动选择服务器和客户端能力范围内的最佳传输…

如何在极狐GitLab中添加 SSH Key?

本文分享如何生成 SSH Key 并添加到极狐GitLab 中&#xff0c;然后用 SSH Key 进行代码拉取。 极狐GitLab 是 GitLab 在中国的发行版&#xff0c;可以私有化部署&#xff0c;对中文的支持非常友好&#xff0c;是专为中国程序员和企业推出的企业级一体化 DevOps 平台&#xff0…

路由器的固定ip地址是啥意思?固定ip地址有什么好处

‌在当今数字化时代&#xff0c;‌路由器作为连接互联网的重要设备&#xff0c;‌扮演着举足轻重的角色。‌其中&#xff0c;‌路由器的固定IP地址是一个常被提及但可能让人困惑的概念。‌下面跟着虎观代理小二一起将深入探讨路由器的固定IP地址的含义&#xff0c;‌揭示其背后…

图文解析保姆级教程:Postman专业接口测试工具的安装和基本使用

文章目录 1. 引入2. 介绍3. 安装4. 使用 此教程摘选自我的笔记&#xff1a;黑马JavaWeb开发笔记16——请求&#xff08;postman、简单参数、实体参数、RequestParam映射&#xff09;想要详细了解更多有关请求各种参数介绍的知识可以移步此篇笔记。 1. 引入 在当前最为主流的开…

营养餐共享网站:项目规划Plan1

缘起 一些小众的项目&#xff0c;可能还没有较好的网站服务。一些APP项目&#xff0c;受限于支付宝和微信等的限制&#xff0c;只能很简单的在搜索框查找&#xff0c;不能像网站那样在公开引擎上搜索&#xff0c;那个范围更广&#xff0c;搜索到的结果更多。 所以我们想做一个…