03. 网络、安全组与公网 IP

三种 IP 不要混

部署时最容易混的是这三个地址:

名称例子用途
服务器内网 IP10.x.x.x / 172.x.x.x云厂商 VPC 内部通信,不能给公网浏览器用
服务器公网 IP101.x.x.x浏览器访问 New API 用
本机公网 IP运营商分配给你家/公司网络的出口 IP腾讯云安全组“来源”要填它

查看服务器公网 IP

腾讯云控制台:

云服务器 CVM -> 实例 -> 找到服务器 -> 公网 IPv4 地址

访问 New API 时用:

http://服务器公网IP:3000

查看本机公网 IP

在 Mac 本地终端:

curl -4 ifconfig.me

假设返回:

123.45.67.89

那么腾讯云安全组入站规则的来源填:

123.45.67.89/32

也可以在浏览器搜索“我的 IP”。

注意:如果开了代理,查出来的可能是代理出口 IP。安全组要允许的是你当前访问服务器时的出口 IP。

腾讯云安全组规则

New API 需要开放 3000

建议规则:

类型协议端口来源策略备注
自定义TCP:3000你的本机公网IP/32允许new-api

临时测试可以用:

0.0.0.0/0

确认能访问后,改回自己的公网 IP 白名单。

安全组要绑定到实例

只创建安全组规则不够,还要确认这个安全组绑定到了服务器实例。

检查路径:

腾讯云控制台 -> 云服务器 CVM -> 实例详情 -> 安全组

如果规则写在一个没绑定到该实例的安全组里,不会生效。

502 / 无法访问时的分层排查

服务器上执行:

docker exec new-api wget -qO- http://localhost:3000/ | head -3
curl -sI http://127.0.0.1:3000/
ss -tlnp | grep 3000
iptables -L -n | grep -E "3000|8317"

本机 Mac 上执行:

curl -v --max-time 10 http://服务器公网IP:3000/

判断方式:

现象常见原因
服务器本地 127.0.0.1:3000 返回 200,但外网不通安全组或系统防火墙
ss 没有 0.0.0.0:3000容器没监听或端口映射错
浏览器 502,但本机 curl 也 502中间有反代/CDN/安全产品
timeout安全组未放行或来源 IP 不对
connection refused端口没监听或容器没起来

换端口测试

如果怀疑 3000 被云厂商或安全组件特殊拦截,可以换成 8001

docker stop new-api
docker rm new-api
docker run -d --name new-api --restart unless-stopped -p 8001:3000 -e TZ=Asia/Shanghai -v /root/new-api/data:/data calciumion/new-api:latest

安全组也对应放行 8001,访问:

http://服务器公网IP:8001