DNS、端口、安全组与反向代理

DNS、端口、安全组与反向代理

1. DNS:只负责“域名 → IP 的映射”

DNS(域名解析)只做一件事:

xx.example.com → 服务器公网 IP

不涉及端口、不涉及防火墙、不涉及安全策略。 你只是告诉全球的 DNS 服务器:

“访问这个域名,请去找这台服务器。”


2. 端口:服务监听的位置

服务器上的每一个服务,都需要监听一个端口,例如:

服务 默认端口 是否需对外开放?
HTTP 80 ✔ 通常开放
HTTPS 443 ✔ 通常开放
xx 后端 1234 ❌ 不需要开放

如果你的 xx 运行在:127.0.0.1:1234,那么它只允许 本机访问。 外网无论如何都无法访问这个端口,即使安全组放行了 1234 端口。

如果你的 xx 运行在:0.0.0.0:1234,那么它允许 所有 IP 访问。 但是,是否能从外网访问,还要看安全组中是否放行了 1234 端口。


3. 安全组:决定外网能否访问某个端口

安全组是云厂商提供的入口防火墙,决定哪些端口可以从外网访问。例如:

端口 安全组放行? 外网能访问吗?
80
443
1234 不能

只要你的安全组没有放行 1234,即便服务监听了 0.0.0.0:1234,外网仍然无法访问。


4. 反向代理(Nginx):把外网请求转发给内部服务

反代负责将 80/443 的访问转发到内部端口,如:

https://xx.example.com
       ↓
Nginx(监听 80/443)
       ↓
127.0.0.1:1234(xx 后端)

反向代理的意义是:

  • 外网用户只需要访问域名(80/443)
  • 内部服务可以隐藏在任意端口
  • 后端端口无需暴露给外网(更安全)

这就是为什么后端端口不用开放


5. 常见问题

Q: 配置了反代后,我需要在云服务器后台开启 1234 端口吗?

A: 完全不需要。 因为流量是先到达 Nginx (443端口),然后由 Nginx 在服务器内部通过 localhost 转发给 1234。外部防火墙根本看不到这个内部转发过程,所以 1234 端口应当保持关闭状态。

Q: 如何检测我的服务是否只监听在本地以及是否开启?

A: 使用 netstatss 命令查看端口监听状态:

# 使用 netstat
sudo netstat -ltn | grep 1234
# 使用 ss
sudo ss -ltn | grep 1234

# 正确的状态 (只允许本地)
tcp  0  0  127.0.0.1:1234   0.0.0.0:* LISTEN

# 危险的状态 (允许所有 IP)
tcp  0  0  0.0.0.0:1234     0.0.0.0:* LISTEN

6. 总结

一张简单的关系图

┌──────────────────────────────┐
│        用户访问域名           │
└───────────────┬──────────────┘
                ↓
        DNS:解析域名 → 服务器 IP
                ↓
┌───────────────┴──────────────┐
│     Nginx(监听 80 / 443)     │
│  负责接收外网请求并做反向代理 │
└───────────────┬──────────────┘
                ↓
     内部服务(如 127.0.0.1:1234)

如果你使用 Nginx 为 xx 或其他后端程序做反代:

  • 必须开放的端口:80 / 443
  • 不需要开放的端口:1234 等内部端口
  • ✔ 内部服务保持监听 127.0.0.1 或 0.0.0.0 即可
  • 只要做了反代,后端端口就不需要开放!

用一句话总结:

DNS 负责找服务器,安全组控制外网访问权限,端口决定服务位置,反代负责把外部请求转发到内部服务。因此,反代后的后端端口无需对外开放。