03. 网络、安全组与公网 IP
三种 IP 不要混
部署时最容易混的是这三个地址:
| 名称 | 例子 | 用途 |
|---|---|---|
| 服务器内网 IP | 10.x.x.x / 172.x.x.x | 云厂商 VPC 内部通信,不能给公网浏览器用 |
| 服务器公网 IP | 101.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