用ngrok快速实现内网穿透:临时分享你的Web项目

引言

事情是这样的,今年我写完一份 PythonWeb(Django)的 项目,然后想和朋友分享一下。常规办法就是用 ToDesk 或者向日葵远程桌面展示,但这有一个壁垒:必须我们两个人同时在线,而且每次都准备电脑,非常不便。如果想把项目展示给更多人,就更难实现了。最直接的办法当然是上线、买域名、部署到服务器,但这一套流程下来,又要配置模块,又要购买服务器,既费钱又耗时——有时候我们只是想做一次简单的临时展示,完全没必要这么折腾。其实,内网穿透技术正好满足这种临时、快速分享的需求。今天这篇博客就简单介绍其中一种非常好用的内网穿透工具——ngrok,并教你如何用它一键把你的 Django 项目分享给任何人。

什么是内网穿透?

内网穿透(NAT穿透)是一种技术,它可以让外网设备访问你内网(局域网)中的服务。通常,我们本地的开发服务器只能在局域网内访问,但借助内网穿透工具,可以生成一个公网域名,所有发往该域名的请求都会被转发到你本地的指定端口,从而实现外网访问本地项目的效果。

ngrok 是什么?

ngrok 是一款流行的内网穿透工具,它通过安全的隧道将公网请求转发到你本地的 HTTP/HTTPS 服务。你只需要在本地运行 ngrok 客户端,它就会与 ngrok 的服务器建立连接,并分配一个公网 URL(如 https://xxxx.ngrok.io)。之后,任何人访问这个 URL 就能直接看到你本地运行的项目。

ngrok 的优点

  • 无需公网 IP,无需服务器:本地开发机即可直接暴露给外网。
  • 极速启动:下载客户端,一行命令,一分钟内就能拿到公网地址。
  • 自动 HTTPS:ngrok 默认提供 HTTPS 访问,安全又省心。
  • 调试友好:ngrok 的 Web 界面(http://127.0.0.1:4040)会记录所有请求的详情,方便调试。
  • 支持 TCP 隧道:不限于 HTTP,还可以暴露 SSH、数据库等服务(付费功能)。

ngrok 的缺点

  • 免费版域名随机:每次重启 ngrok 都会生成新的随机子域名,需要重新分享 URL(付费后可固定子域名)。
  • 带宽与连接数限制:免费版有流量和并发连接的限制,不过对于小型演示已经足够。
  • 数据经过 ngrok 服务器:所有流量都会经过 ngrok 的服务器,如果项目涉及敏感数据,需注意隐私风险。
  • 国内访问可能不稳定:ngrok 的国际服务器有时会被干扰,国内用户可考虑国内替代品(如 natapp、花生壳等)。

如何使用 ngrok 分享你的 Django 项目

下面,我们以 Django 项目为例,一步步教你用 ngrok 实现临时公网访问。

第一步:注册 ngrok 账号并获取 Authtoken

  1. 访问 ngrok 官网 注册一个账号(免费)。
  2. 登录后,进入 Dashboard,在左侧找到 Your Authtoken,复制你的 Authtoken。

第二步:下载并安装 ngrok 客户端

  1. 在官网下载对应你操作系统的 ngrok 客户端(Windows/macOS/Linux)。
  2. 解压下载的文件,得到一个可执行文件 ngrok(Windows 下是 ngrok.exe)。建议将其放到系统 PATH 路径下,或者直接在命令行中切换到该目录运行。
  3. 在终端中执行以下命令,将你的 Authtoken 绑定到本地客户端(只需执行一次):
    ngrok authtoken 你的Authtoken
    

Ps:其实这一步不执行也可以,无非后面你用到需要在终端cd 一下ngrok的位置打开即可!

在这里插入图片描述
在这里插入图片描述

第三步:启动 Django 开发服务器

确保你的 Django 项目已经可以在本地正常运行。在项目根目录下执行:

python manage.py runserver

默认情况下,Django 会在 http://127.0.0.1:8000 启动开发服务器。保持该终端窗口运行。这个我说一下8000是一般默认的端口,但比如你同时启动了多个Web的项目,而一个端口只能配置一个项目,这个时候你可能给你的项目分配8001或者8002等端口,甚至8003端口如下图:

在这里插入图片描述

第四步:用 ngrok 暴露本地端口

新开一个终端窗口,执行:

ngrok http 8003(将8003替换成你的实际端口)

在这里插入图片描述

你会看到类似下面的输出:

ngrok by @inconshreveable                                       (Ctrl+C to quit)

Session Status                online
Account                       你的账户名 (Plan: Free)
Version                       3.x.x
Region                        United States (us)
Latency                       46ms
Web Interface                 http://127.0.0.1:4040
Forwarding                    https://xxxx-xx-xx-xx-xx.ngrok.io -> http://localhost:8000

其中 https://xxxx-xx-xx-xx-xx.ngrok.io 就是你的公网访问地址。

第五步:修改 Django 的 ALLOWED_HOSTS

因为 Django 默认只允许 localhost127.0.0.1 访问,如果不修改,当外网请求进来时,Django 会抛出 DisallowedHost 错误。因此,需要编辑 Django 项目的 settings.py,将 ngrok 分配的域名添加到 ALLOWED_HOSTS 中:

ALLOWED_HOSTS = [
    'localhost',
    '127.0.0.1',
    'xxxx-xx-xx-xx-xx.ngrok.io',   # 替换成你实际的域名
]

注意:每次重启 ngrok 域名都可能变化,记得同步更新 ALLOWED_HOSTS

第六步:分享给你的朋友

现在,把生成的 URL(例如 https://xxxx-xx-xx-xx-xx.ngrok.io)发给朋友,他们就能在公网上访问你的本地 Django 项目了!所有请求都会实时转发到你的开发服务器。

额外小技巧

  • 查看请求详情:打开 http://127.0.0.1:4040,可以看到 ngrok 记录的每一个 HTTP 请求的详细信息,包括 Header、Body、响应时间等,非常便于调试。
  • 自定义子域名(付费):如果你购买付费套餐,可以固定子域名,比如 ngrok http -subdomain=myproject 8000 会得到 https://myproject.ngrok.io
  • 同时暴露多个服务:可以开启多个 ngrok 进程,分别映射不同的本地端口。

注意事项

  • 免费版限制:免费版 ngrok 每分钟最多处理 40 个连接,带宽约 1MB/s,适合轻量演示。另外,每次启动的随机域名会在 2 小时或重启后过期,需重新分享。
  • Django 静态文件:如果你的项目涉及静态文件,且 DEBUG=False,需要确保静态文件正确收集或使用其他方式托管,否则可能无法加载样式。
  • 安全提醒:不要把 ngrok URL 公开在不可信的地方,因为你的本地服务可能会被任意访问。最好在演示结束后及时关闭 ngrok。

其他内网穿透工具简介

除了 ngrok,市面上还有很多优秀的内网穿透工具,你可以根据自己的需求选择:

  • natapp:国内服务,基于 ngrok 的二次开发,支持国内加速,有免费隧道(带宽和流量限制)。
  • frp:开源项目,需要自建服务器,功能强大,适合有公网服务器的用户。
  • localtunnel:轻量级工具,无需注册,使用简单(npx localtunnel --port 8000)。

总结

ngrok 为开发者提供了一种极其便捷的临时分享方案,无需折腾服务器和域名,就能让朋友随时访问你的本地项目。对于快速演示、移动端调试、临时合作等场景非常实用。虽然免费版有一些限制,但对于大部分演示需求已经足够。如果你也遇到了需要临时分享项目的烦恼,不妨试试 ngrok,感受一下内网穿透的魔力!

如果你在使用过程中遇到困难 可以联系我解决!

参考链接:ngrok 官方文档

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐