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

news2025/3/17 6:21:06

前言

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

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

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

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

什么是内网穿透?

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

通常,家庭或企业网络都位于内网,连接到外部互联网需要通过 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>

在这里插入图片描述

第三步:启动 ngrok

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

在命令行中执行:

ngrok http 80

在这里插入图片描述

此时,ngrok 会为你生成一个公网可访问的 URL,类似于:
在这里插入图片描述

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

第四步:监控和管理隧道

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

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

http://localhost:4041

具体端口是哪个,根据 ngrok 启动的提醒来确认:
在这里插入图片描述

在这里插入图片描述
在这个界面,你可以查看到每个请求的详细信息,包括请求头、响应数据等。

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

我们上面的步骤,生成的公网域名,每次都会变化。
如果你不希望 ngrok 每次启动时生成随机的 URL,可以使用 ngrok 提供的静态域名。
在这里插入图片描述
如上图,使用 ngrok 提供的静态域地址映射本地端口。
在这里插入图片描述

安全提示

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

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

总结

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

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

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

希望对你有帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2112536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt信号和槽【2】

文章目录 1. 带参数的信号槽2. 信号和槽存在的意义3. 信号和槽断开连接4. lambda表达式定义槽函数 1. 带参数的信号槽 Qt的信号和槽也支持带参数。 当信号带有参数的时候&#xff0c;槽的参数必须和信号的参数一致&#xff0c;此时发射信号的时候&#xff0c;就可以给信号函数…

Material xxx SDF Material doesn‘t have _Stencil property

Unity 中导入第三方package后出现警告&#xff1a;Material xxx SDF Material doesnt have _Stencil property&#xff0c;原因是导入的库使用了TextMesh Pro组件&#xff0c;这时组件里的文本无法正常显示&#xff1b; 解决方法是导入两个包&#xff1a;TMP Essential Resour…

VScode 的简单使用

目录 1. VScode 的使用 1.1 常用插件 1.2 常用快捷键 1. VScode 的使用 1.1 常用插件 1.2 常用快捷键 也可以“ CTRLD ”&#xff1b;使用“CTRL滚轮”即可&#xff1b; ctrl /-&#xff0c;是用来展开/收起代码的&#xff1b; 比如&#xff1a;js 的多行注释是 shiftalt…

python的sqlalchemy使用@contextmanager来定义上下文管理器

Python通过函数名调用函数的几种场景 华为或超聚变服务器安装linux 你知道":“和”//"在python里面代表什么吗&#xff1f;这篇《python运算符》介绍&#xff0c;你肯定不想错过 SQLAlchemy通过contextmanager简化回滚操作 如何理解python的sqlalchemy这种orm框架&am…

某城user_dun,js逆向分析

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除! 前言 这次会简单的讲解…

Windows下Python和PyCharm的应用(三)__Numpy与矩阵

1、背景介绍 矩阵运算是Python语言的基石。 而支持矩阵运算的基础语言包就是Numpy。 参考链接&#xff1a; Python中Numpy的使用_numpy在python中的用法-CSDN博客 这篇博客介绍的numpy比我的这篇博客介绍的更加的详细。本博客只是根据本人 的实际应用&#xff0c;对最关键的…

scRNA-data中的R值

愿武艺晴小朋友一定得每天都开心 当我们测序拿得到各个样本中基因的表达值&#xff0c;就可以用基因表达值来表征样本间的相关性 代码如下&#xff1a; #样本间相似性&#xff1a;R值 相关性 捕获到的基因在两个样本间表达趋势一致性 exp_RNA <- AverageExpression(fasti…

[SDK]-组合框 和 列表框控件

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解组合框和列表框控件的相关知识 组合框 组合框由一个列表和一个选择字段,该列表显示用户可以选择的选项 创建组合框&#xff1a; CreateWindow(L"Combobox",//窗口类名L"",//标题C…

使用Python控制Excel应用:打开与关闭工作簿的技术性探讨

目录 引言 一、安装必要的库 1. xlwings 2. openpyxl 二、使用xlwings打开和关闭Excel工作簿 2.1 启动和退出Excel 2.2 打开和关闭工作簿 2.3 创建新工作簿 三、使用openpyxl打开和关闭Excel工作簿 3.1 打开工作簿 3.2 保存和关闭工作簿 四、案例分析 4.1 读取Exc…

linux下的虚拟化

1.下载并且安装 下载客户机和工具 完成之后打开客户机&#xff0c;并且进行安装&#xff1b;安装之后会出现配置软件的界面&#xff0c;我们按照自己的需求进行相关配置即可 这个界面会有我们需要的各种相关设置 在设置自己的超级用户密码以及自己账户及密码之后就完成了虚拟机…

家庭教育系列—投资理财

文章目录 1. 背景介绍2. 趋势容量核心模式3. 一进二模式3. 龙头博弈3.1 空间板博弈3.2 大长腿博弈3.3 反核博弈3.4 龙头反抽博弈 1. 背景介绍 要符合当前市场、顺势而为 打板也好、超短也罢&#xff0c;只是基于市场的形势战略性的选择的一个战术。不管是打板、半路、低吸&…

CAD恢复原始菜单栏

CAD2024菜单栏为ribbon功能区&#xff0c;若想恢复之前菜单栏格式&#xff0c;可采用以下方式&#xff1b;

【机器学习-监督学习】决策树

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;…

Spring Boot 多数据源配置(JPA)

目录 前言 前置环境 pom yml Entity Dao Config Controller 演示 前言 一般一个系统至少有一个数据源&#xff0c;用来持久化业务数据以及查询。单个数据源的系统很常见&#xff0c;在 Spring Boot 框架下配置也很简单。在约定大于配置这个思想下&#xff0c;只需要在…

网络视频流解码显示后花屏问题的分析

问题描述 rtp打包的ps视频流发送到客户端后显示花屏。 数据分析过程 1、用tcpdump抓包 tcpdump -i eth0 -vnn -w rtp.pcap 2、用wireshark提取rtp的payload 保存为record.h264文件 3、用vlc播放器播放 显示花屏 4、提取关键帧 用xxd命令将h264文件转为txt文件 xxd -p…

[Xpath] Xpath基础知识

1.Xpath(XML Path Language)介绍 Xpath用于在HTML文档中通过元素(HTML标签)和属性(HTML标签的属性)进行数据定位 Xpath的优势&#xff1a;灵活且稳定 HTML树状结构 HTML的结构是树形结构&#xff0c;HTML是根节点&#xff0c;所有的其他元素节点都是从根节点发出的&#xff0…

Adobe After Effects的插件--------CC Particle World

CC Particle World是一个粒子效果器,用于在三维空间中生成和模拟各种粒子系统,包括火焰、雨、雪、爆炸、烟雾等等。它会自动随时间变化发射粒子。 本文部分参照 https://www.163.com/dy/article/IEJVDN760536FE6V.html 使用条件 使用该插件的图层需是2D图层。 我们新建一个…

图像生成技术飞速发展,个人化艺术创造还有多远?

图像生成技术飞速发展&#xff0c;个人化艺术创造还有多远&#xff1f; 通义万相文本绘图与人像美化希望图像生成类应用具备哪些功能通义万相改进建议 在当今这个创意与科技交织的时代&#xff0c;图像生成技术正以前所未有的速度重塑视觉艺术的边界。不管你是否有艺术细胞&…

递推,CF 353D - Queue

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 353D - Queue 二、解题报告 1、思路分析 手玩一下&#xff0c;我们发现相…

数据结构 - 线性表

0.线性表 1.定义 线性表就是零个或多个相同数据元素的有限序列。 2.线性表的存储结构 ①.顺序结构 ②.链式结构 3.线性表的表示方法 例如&#xff1a; 一.线性表的基本运算 二.线性表的复杂运算 1.线性表的合并运算 2.线性表的去重运算 三.顺序表 1.定义 顺序表&#xff0c;就…