引言:从一个让人抓狂的“无法访问”开始
💡 推荐阅读:别再租第三方网盘了!手把手教你用 Docker 自建一套高可用私有云盘,彻底掌控数据主权
相信不少刚开始折腾云服务器的朋友,都遇到过这种场景:明明在云控制台看到服务器状态是“运行中”,安全组规则也加了,程序也启动了,但就是死活访问不了。你开始怀疑是不是防火墙没关,又或者是Nginx配置写错了?
折腾半天,最后发现是IP地址用错了——把内网IP当公网IP去访问,或者端口监听在了错误的网卡上。这种问题对老手来说可能不值一提,但对刚入门的朋友来说,确实容易绕晕。
今天这篇文章,笔者就借着实操经验,把公网IP、内网IP的区别以及端口配置的正确姿势掰开揉碎讲清楚。全程干货,建议收藏。
环境准备与前置要求
💡 延伸阅读:Nginx 频繁 502 Bad Gateway?别急着重启,这份排查与修复实战指南请收好
在开始动手之前,先确认你手头有这些东西:
- 一台云服务器(无论是阿里云、腾讯云还是其他厂商,原理通用)。
- 已经拿到服务器的公网IP和内网IP(在云控制台实例详情页都能看到)。
- 能够通过SSH登录服务器(Windows用Xshell或者直接CMD,Mac/Linux直接用终端)。
准备好之后,咱们先搞清楚概念,再动手实操。
第一步:彻底搞懂公网IP与内网IP的核心区别
💡 深度技术指南:云服务器到期不用慌:一套无缝迁移方案,把网站搬家成本降到最低
很多朋友容易陷入一个误区,觉得IP就是IP,哪有什么内外之分。其实不然。
1. 什么是公网IP?
公网IP(Public IP)是你在互联网上的“门牌号”。全世界任何一台能上网的设备,都可以通过这个IP直接找到你的服务器。比如你通过ssh root@你的公网IP登录服务器,用的就是公网IP。
2. 什么是内网IP?
内网IP(Private IP)是云厂商在私有网络(VPC)内部分配的地址。它只在云厂商的内部网络里生效,公网是访问不到这个IP的。比如你买了一台服务器,它的内网IP可能是172.16.0.3或者10.0.0.12,这类IP段属于保留私网段。
3. 核心区别速览表
| 对比项 | 公网IP | 内网IP |
|---|---|---|
| 访问范围 | 全球互联网可达 | 仅限云厂商VPC内部 |
| 主要用途 | 对外提供服务(网站、SSH等) | 内网互联(数据库集群、负载均衡后端) |
| 是否收费 | 通常按带宽或流量计费 | 一般免费(包含在实例费用中) |
| 能否直接访问外网 | 可以 | 不可以(需通过NAT网关) |
划重点:对外提供服务,一律用公网IP;内网机器之间互访,优先用内网IP(速度快、延迟低、不占公网带宽)。
第二步:实操演练——如何正确配置端口监听
概念懂了,接下来上真家伙。咱们以最常见的Nginx部署网站和MySQL数据库内网访问为例,演示端口配置的正确姿势。
场景一:部署Nginx,让公网能访问80端口
1. 安装Nginx
# 以CentOS为例
yum install -y nginx
systemctl start nginx
systemctl enable nginx
2. 检查监听地址
这一步非常关键。很多朋友配置完发现公网访问不了,原因就是Nginx默认监听在了IPv6或者内网网卡上。执行以下命令查看:
netstat -tlnp | grep nginx
# 或者
ss -tlnp | grep nginx
正确的输出应该是这样:
tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=1234,fd=6))
注意看*:80,这表示Nginx监听在所有网卡的80端口,包括公网网卡。如果你看到的是127.0.0.1:80,那说明它只监听在本地回环地址上,公网自然访问不了。此时需要修改Nginx配置文件(/etc/nginx/nginx.conf),把listen改成listen 80;即可。
3. 配置云安全组
这一步千万别忘了。在云控制台找到安全组,添加入站规则:
协议: TCP
端口: 80/80
授权对象: 0.0.0.0/0 # 表示允许所有IP访问
如果你只想让特定IP访问,可以填你的家庭宽带IP或者公司出口IP。
4. 验证公网访问
curl http://你的公网IP
如果返回Nginx的欢迎页面,恭喜你,配置成功!
场景二:MySQL只允许内网访问,禁止公网暴露
出于安全考虑,数据库这类敏感服务不应该暴露到公网。正确做法是让MySQL只监听内网IP。
1. 修改MySQL配置文件
vim /etc/my.cnf
# 在[mysqld]段下添加或修改:
bind-address = 你的内网IP
2. 重启MySQL
systemctl restart mysqld
3. 验证监听状态
netstat -tlnp | grep 3306
此时你会看到监听地址变成了内网IP,公网IP的3306端口已经无法访问了。
4. 配置安全组(只放行内网)
在安全组里,入站规则这样写:
协议: TCP
端口: 3306/3306
授权对象: 你的另一台云服务器的内网IP
这样,只有你指定的那台内网机器能连上数据库,安全性直接拉满。
第三步:避坑清单——这些坑我替你踩过了
实操过程中,有几个高频坑点,笔者总结如下,请务必留意:
- 坑1:安全组规则没生效。修改安全组后,记得检查规则优先级,有些厂商默认拒绝所有入站,需要单独放行。
- 坑2:服务器内部防火墙没关。除了云安全组,服务器本身的iptables或者firewalld也可能拦截端口。执行
systemctl stop firewalld或者放行端口。 - 坑3:Nginx启动失败。80端口被占用时,Nginx会报错。用
lsof -i:80查看占用进程,或者改用8080等端口。 - 坑4:公网IP换了。如果你的服务器没有绑定弹性公网IP,重启后公网IP可能会变。建议在控制台把公网IP转为弹性公网IP(EIP),避免IP变动导致服务不可用。
- 坑5:误把内网IP当公网IP用。这个最基础也最容易犯。记住,在浏览器、SSH客户端里访问的,永远是公网IP。
总结与建议
公网IP与内网IP的区别,本质上就是“对外服务”与“内部互联”的分工。理解了这个底层逻辑,再配合安全组规则和监听地址的配置,绝大多数端口问题都能迎刃而解。
最后给各位站长一个中肯的建议:云服务器的选择很重要,靠谱的厂商能让你少踩很多坑。无论你是做个人博客还是企业官网,建议优先选择大厂或者口碑较好的服务商,带宽充足、安全组规则清晰、售后响应快,这些在关键时刻都是救命稻草。别贪便宜买那些小众厂商的“超售”机器,性能和稳定性都堪忧。
希望这篇文章能帮你彻底告别IP和端口配置的烦恼。如果你还有其他疑问,欢迎在评论区留言交流,笔者看到会第一时间回复。
相关技术专题与延伸阅读
- 别再租第三方网盘了!手把手教你用 Docker 自建一套高可用私有云盘,彻底掌控数据主权
- Nginx 频繁 502 Bad Gateway?别急着重启,这份排查与修复实战指南请收好
- 云服务器到期不用慌:一套无缝迁移方案,把网站搬家成本降到最低
- 服务器防火墙别再裸奔了!UFW 开放 80、443 和业务端口,这份配置指南比你想的更细
📦 【资源免费领】本文全套实操配置文件与避坑手册下载
本文涉及的全套 Docker Compose 配置文件、服务器运维避坑清单及 AI 提效指令库已完整打包,可免费极速转存:
💡 提示:推荐使用手机【夸克网盘 App】打开保存,新用户首月免费赠送 1TB 超大空间与免流量极速下载特权。