要让朋友通过公网IP访问到你服务器上的网页,核心就一句话:让服务器的HTTP或HTTPS端口(默认80和443)被公网可达,同时你的程序在监听这些端口,并且防火墙没有拦截。 听起来简单,但实际配置时,很多人卡在安全组、路由器和本地防火墙这三道关卡上,下面这套设置教程,就是帮你把每一步走通。
公网IP访问服务器网页设置教程:三步完成
第一步:确认你的服务器拿到的是公网IP
公网IP是全球唯一可路由的地址,内网IP是私有网段,如果你用的是云服务器,控制台里显示的那个公网IP就是你的入口;如果你用的是家里电脑当服务器,情况稍微复杂一点。
- 先在服务器上执行
curl ifconfig.me,记下输出的IP。 - 再登录路由器管理页,查看WAN口状态里的IP地址。
- 两边一致,说明你拿到了真正的公网IP,不一致,说明你处在运营商的大内网里,后面只能走内网穿透路线。
这一步很多人会忽略,但它是判断后续方案的基础,业内专家指出,超过半数“公网IP无法访问”的案例,其实是因为服务器根本没有公网IP。
第二步:云控制台安全组和本地防火墙双双放行
云服务器的第一道门是安全组,不是系统防火墙,以简米云和酷番云为例,你需要去控制台找到实例,进入安全组规则,添加入方向规则:端口填80和443,授权对象填0.0.0/0,如果漏了这一步,后面所有本地配置都是白费。
放行安全组后,再处理服务器本机防火墙,CentOS系统执行:
firewall-cmd --add-port=80/tcp --permanent firewall-cmd --reload
Ubuntu系统执行:
ufw allow 80/tcp ufw reload
这一步是让请求真正到达你的Web服务进程。
第三步:检查Web服务是否监听在了正确地址
常见问题不是服务没启动,而是服务监听了0.0.1而不是0.0.0,用netstat -tlnp查看,如果看到类似0.0.0:80或[::]:80,说明正常;如果是0.0.1:80,那就只有本机能访问。
修改Nginx或Apache的配置文件,把listen改为80或0.0.0:80,重启服务,完成后,浏览器直接输入http://公网IP就能看到网页。
没有公网IP怎么访问内网服务器?试试这两种方案
如果你在路由器WAN口看到的IP和curl ifconfig.me结果不一致,说明你没有公网IP,这时想从外面访问,有两条实际路径。
路由器端口映射(前提是路由器能拿到公网IP)
有些地区虽然默认是大内网,但你可以打电话给运营商申请公网IP,通常免费,拿到后,在路由器管理页找到“端口映射”或“虚拟服务器”选项:
- 外部端口填
80 - 内部IP填你服务器的内网地址,比如
168.1.100 - 内部端口填
80 - 协议选
TCP
保存后,用公网IP访问即可,如果运营商封了80端口,就把外部端口改成8080,访问时带上http://公网IP:8080。
内网穿透(没有公网IP也能跑)
内网穿透的原理,是把内网服务通过一条隧道映射到一台有公网IP的服务器上,常见的工具有frp和ngrok。
以frp为例,你需要先有一台公网服务器,在那台服务器上运行:
./frps -c frps.toml
frps.toml里设置bindPort = 7000,然后在内网机器上运行frpc,配置指向服务器的IP和端口,并映射本机的80端口:
serverAddr = "你的公网服务器IP" serverPort = 7000 [[proxies]] name = "web" type = "tcp" localIP = "127.0.0.1" localPort = 80 remotePort = 80
启动后,访问http://你的公网服务器IP就能看到内网网页,要注意remotePort尽量别用80,因为很多云厂商默认封了80端口,改用8080更稳妥。
两种方案怎么选?看这张表
| 对比项 | 路由器端口映射 | 内网穿透 |
|---|---|---|
| 前提条件 | 需要路由器有公网IP | 需要一台公网服务器 |
| 稳定性 | 依赖家庭宽带上行速度 | 依赖中转服务器带宽 |
| 成本 | 基本免费 | 服务器租用费用 |
| 适用场景 | 有公网IP的家庭宽带 | 无公网IP或不想折腾路由 |
行业共识认为,个人项目用内网穿透省事,生产环境还是老老实实上云服务器。
服务器公网IP无法访问怎么办?按这个顺序排查
遇到过太多人一上来就怀疑IP被封,其实90%是配置问题,按下面顺序走一遍:
- 先测本机:在服务器上执行
curl http://127.0.0.1,能出来页面,说明服务本身在跑。 - 再测内网IP:局域网里另一台电脑访问
http://服务器内网IP,能通,说明监听地址没问题。 - 然后用手机流量测公网IP:手机关WiFi,打开浏览器输入
http://公网IP,不通就继续往下查。 - 查安全组:登录云控制台,确认80/443端口在入方向规则里。
- 查路由器:如果你用的是家用路由器,确认端口映射内外端口没填反。
- 查本地防火墙:临时执行
iptables -L -n看有没有DROP规则,或者直接关闭防火墙测试。
几个容易被忽略的坑
- 安全组规则顺序:有些云平台规则有优先级,别把拒绝规则放在允许规则前面。
- 代理服务器:某些服务器默认开了Nginx代理,但upstream指向了错误的后端端口。
- 运营商封锁:国内不少地方封了80和443端口,用
telnet 公网IP 80测试连接是否成功,如果超时但8080通,基本就是被封了。
公网IP多少钱一年?选型建议
很多人问价格,其实公网IP的费用和购买方式绑得很紧,国内主流云厂商按带宽计费,固定带宽越贵,按流量计费适合访问量小的场景,以一台轻量应用服务器为例,在华东地域购买,通常包含一个公网IP,一年的费用集中在带宽和套餐里,具体价格看活动。
固定IP和弹性IP的区别
- 固定IP:绑定在实例上,不能单独解绑,换实例或升级配置后,IP可能变。
- 弹性IP:这是一个独立的公网IP资源,可以随时绑定到不同服务器上,适合需要频繁更换服务器的玩家。
如果你只是搭个博客或个人项目,没必要单独买弹性IP,直接选带公网IP的云服务器套餐更划算,家庭用户的话,可以打电话问运营商“能不能开公网IP”,部分城市免费,但加固定IP可能要收月租。
换个思路:备案和域名不是必须的
直接用IP访问不需要备案,但如果你打算绑定域名,且服务器在境内,就必须走ICP备案流程,不想备案的话,有两条路:
- 把服务器放在香港或海外地域,像酷番云的香港轻量服务器就免备案。
- 用IP加端口的方式临时访问,比如
http://123.45.67.89:8080,适合调试。
无论是云服务器还是家里自建,公网IP访问网页的本质都是打通网络链路:公网IP负责找到你,端口映射和安全组负责开门,Web服务负责响应,记住这个逻辑,按顺序操作,90%的问题都出不了这三步之外。
公网IP访问服务器网页常见问题解答
我已经有公网IP,为什么还是访问不了?
先看安全组是否放行80和443,再看服务器本地防火墙,最后用netstat -tlnp确认进程监听的不是0.0.1,三步都对了,基本就能通。
没有公网IP怎么访问内网服务器?
可以用路由器端口映射,前提是路由器能拿到运营商分配的公网IP;否则就用frp或ngrok做内网穿透,把内网端口映射到一台有公网IP的服务器上,通过那台服务器的IP加端口访问。
运营商封了80端口怎么办?
把Web服务的监听端口换成8080或8443,访问时在地址后面加上端口号,如果你要对外提供正式网站,可以申请备案,备案通过后一般会解封。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/785194.html


