核心概念:为什么外网不能直接访问?
你的 Tomcat 服务器通常位于一个局域网(比如家庭网络或公司内网)中,这个局域网中的所有设备(你的电脑、手机、服务器等)都通过一个路由器共享一个公网 IP 地址 访问互联网。

- 内网 IP (私有 IP):
168.1.100、0.0.5,这是路由器给你电脑分配的内部地址,只在局域网内可见。 - 公网 IP (公共 IP):
45.67.89,这是你的互联网服务提供商 分配给你路由器的地址,整个互联网上的设备都能看到。
当外网用户访问 45.67.89 时,请求首先到达你的路由器,但路由器不知道这个请求应该转发给局域网内的哪台设备(是 168.1.100 还是 168.1.101?),也不知道应该使用哪个端口(是 8080 还是 22?)。端口映射就是告诉路由器:“所有发往 公网IP:8080 的请求,都转发给 内网IP:8080 的设备”。
端口映射 (Port Forwarding) - 适合有公网 IP 的场景
这种方法需要你能够配置连接你内网的路由器,大多数家庭宽带和企业网络都支持此功能。
操作步骤:
第 1 步:获取 Tomcat 服务器的内网 IP 地址
- 在运行 Tomcat 的服务器电脑上,打开命令提示符 或终端。
- 输入命令
ipconfig(Windows) 或ifconfig/ip addr(Linux/Mac)。 - 找到你的网络连接(如“以太网适配器”或“en0”),记下对应的 IPv4 地址,这就是你的 Tomcat 服务器的内网 IP,
168.1.100。
第 2 步:获取路由器的公网 IP 地址

- 在任意能上网的设备上,打开浏览器,访问
ip.sb、whatismyip.com或cmyip.com等网站。 - 页面上显示的就是你的路由器的公网 IP 地址,
45.67.89。
第 3 步:配置 Tomcat 服务器
为了方便外网访问,建议修改 Tomcat 的监听端口,默认端口是 8080,但你可以修改为 80,这样访问时就无需输入端口号(http://123.45.67.89 而不是 http://123.45.67.89:8080)。
- 找到 Tomcat 安装目录下的
conf/server.xml文件。 - 用文本编辑器打开,找到如下行:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> - 将
port="8080"修改为你想要的端口,port="80"。注意:端口号1024以下的端口需要管理员/root 权限才能使用。 - 保存文件并重启 Tomcat 服务器。
第 4 步:在路由器上进行端口映射
这是最关键的一步,不同品牌路由器的设置界面不同,但逻辑大同小异。

- 登录路由器管理后台:在浏览器中输入路由器的管理地址,通常是
168.1.1、168.0.1或168.31.1(具体地址请查看路由器背面标签)。 - 找到端口映射/虚拟服务器/转发设置:这个功能可能在“高级设置”、“NAT转发”、“端口映射”等菜单下。
- 添加映射规则:
- 服务端口/外部端口:输入你希望外网访问的端口,
80。 - 内部 IP 地址:输入你在第 1 步中获取到的 Tomcat 服务器的内网 IP,
168.1.100。 - 内部端口:输入 Tomcat 实际监听的端口,如果你在第 3 步改成了
80,这里就填80,如果没改,就填8080。 - 协议:选择
TCP(Tomcat 使用 TCP 协议)。 - 状态:勾选
启用。
- 服务端口/外部端口:输入你希望外网访问的端口,
- 保存并应用设置,路由器可能会重启。
第 5 步:测试访问
- 确保你的电脑防火墙 或服务器的防火墙没有阻止 Tomcat 端口(如
80或8080)。 - 在外网的一台电脑上(比如你的手机流量,或者朋友家的网络),打开浏览器。
- 输入
http://你的公网IP(http://123.45.67.89) 进行访问。
如果一切顺利,你就能看到 Tomcat 的欢迎页面了!
内网穿透 - 适合没有公网 IP 或无法修改路由器的场景
很多家庭宽带用户没有固定的公网 IP,或者路由器在运营商网络下,无法进行端口映射,这时,内网穿透是最佳选择。
内网穿透的原理是:你在公网(例如云服务器)上部署一个中转服务,你在内网的 Tomcat 服务器上运行一个客户端,这个客户端会主动连接到中转服务并注册一个“隧道”,这样,外网用户访问中转服务的某个端口时,请求就会通过这个隧道转发到你的内网 Tomcat。
主流内网穿透工具:
- frp (Fast Reverse Proxy):功能强大、性能好、开源免费,是目前最流行的选择。
- ngrok:非常简单易用,有免费套餐,但免费版有域名随机、带宽限制等问题。
- 花生壳:老牌的商业服务,提供付费的稳定内网穿透方案。
下面以 frp 为例,讲解如何配置。
frp 配置步骤:
第 1 步:准备 frp 服务端和客户端
- 下载 frp:访问 frp GitHub Release 页面 下载最新版本的服务端和客户端程序,通常服务端和客户端的版本要一致。
- 服务端:你需要一台有公网 IP 的服务器(可以是阿里云、腾讯云、Vultr 等任何云服务器)。
- 客户端:将下载的 frp 客户端程序(
frpc)放到你的 Tomcat 服务器上。
第 2 步:配置 frp 服务端
在你的公网服务器上,编辑 frps.ini 文件:
# frps.ini [common] # frp 服务端监听的端口 bind_port = 7000 # 设置一个仪表盘端口,方便查看客户端连接状态 dashboard_port = 7500 # 设置仪表盘的用户名和密码,强烈建议设置! dashboard_user = admin dashboard_pwd = your_password
启动服务端:
./frps -c frps.ini
第 3 步:配置 frp 客户端
在你的 Tomcat 服务器上,编辑 frpc.ini 文件:
# frpc.ini [common] # frp 服务端的公网 IP 地址 server_addr = 你的公网服务器IP # frp 服务端监听的端口,必须和上面服务端配置的 bind_port 一致 server_port = 7000 # 配置一个 Tomcat 的代理 [tomcat_web] # 类型是 http type = http # 本地 Tomcat 服务的内网 IP 和端口 local_ip = 127.0.0.1 # 或者你服务器的内网 IP,如 192.168.1.100 local_port = 8080 # 访问此代理的公网域名前缀(如果你有域名的话)或者自定义的二级域名 # 如果你没有域名,可以使用 subdomain = "random",frp 会分配一个随机的子域名 subdomain = myweb
启动客户端:
./frpc -c frpc.ini
第 4 步:测试访问
- 确保服务端和客户端都在运行。
- 打开浏览器,访问
http://你的公网服务器IP:7500,输入你设置的账号密码,可以查看到客户端的连接状态。 - 访问你的 Tomcat 服务:
- 如果你在
frpc.ini中配置了subdomain并且你有一个域名解析到了你的公网服务器 IP,那么你可以通过http://myweb.你的域名.com来访问。 - 如果你没有域名,frp 默认会提供一个类似
http://你的公网服务器IP:8080的访问地址(具体取决于 frp 版本和配置,请查看服务端日志或仪表盘获取正确的端口和地址)。
- 如果你在
重要注意事项
-
安全风险:
- 端口映射:直接将服务器暴露在公网上,如同打开了家门。强烈建议不要使用默认的
8080或80端口,而是使用一个高端口号(如58080),确保 Tomcat 的manager和host-manager管理页面设置了强密码,并限制访问 IP。 - 内网穿透:同样存在安全风险,但比直接端口映射要安全一些,因为流量经过了 frp 服务的“中转”,请务必设置
dashboard的用户名和密码。
- 端口映射:直接将服务器暴露在公网上,如同打开了家门。强烈建议不要使用默认的
-
动态公网 IP:如果你使用的是家庭宽带,你的公网 IP 可能会经常变化,端口映射后,IP 变了映射就失效了,你需要使用 DDNS (动态域名解析) 服务,将一个固定的域名(如
myhome.ddns.net)动态指向你当前变化的公网 IP,路由器通常自带 DDNS 客户端功能。 -
防火墙:请检查并放行所有涉及的端口:
- Tomcat 服务器防火墙:放行
8080或你自定义的端口。 - 路由器防火墙:确保端口映射的端口是开启的。
- 云服务器防火墙:如果你使用 frp,确保云服务器的
7000(frp端口) 和7500(dashboard端口) 是开放的。
- Tomcat 服务器防火墙:放行
-
带宽和性能:公网访问速度受限于你的家庭/公司宽带的上行带宽,这通常远低于下行带宽,上传大文件或进行高并发访问可能会很慢。
| 特性 | 端口映射 | 内网穿透 |
|---|---|---|
| 原理 | 路由器转发请求 | 公网中转服务 |
| 成本 | 通常免费(利用现有设备) | frp免费,商业服务(如花生壳)收费 |
| 适用场景 | 有路由器管理权限,有公网IP | 无公网IP,无法/不愿修改路由器 |
| 安全性 | 较低,直接暴露 | 相对较高,流量经过中转 |
| 动态IP | 需配合DDNS服务 | 无需关心,客户端主动连接 |
| 推荐度 | 家庭用户首选 | 企业/开发者/无公网IP用户首选 |
对于绝大多数个人用户和小型应用,端口映射 是最直接、成本最低的方案,如果你是开发者,或者网络环境复杂,frp 内网穿透 则提供了极大的灵活性和便利性。
