在腾讯云搭建小游戏服务器,核心原则是“最小权限原则”。不要一上来就全开端口,这不仅不安全,还容易因为配置错误导致连接超时或安全组拦截。
具体开通哪些端口和权限,取决于你的游戏类型(HTTP/HTTPS 还是 Socket/WebSocket)以及是否使用了腾讯云的特定服务(如云开发、即时通信 IM、语音通话等)。
以下是基于常见场景的详细梳理:
一、 基础网络与安全组配置
无论什么游戏,首先要在腾讯云控制台找到你 ECS 实例所在的安全组(Security Group)。这是第一道防线。
1. 管理端口(仅限开发调试)
- SSH (22/TCP): 如果你需要通过终端远程登录 Linux 服务器进行部署和维护,必须开放。
- 建议: 为了安全,最好将源 IP 限制为你自己的固定公网 IP,或者干脆使用腾讯云堡垒机/密钥对登录而不直接暴露 22 端口给全网。生产环境建议关闭 SSH 网络访问,通过内网跳板机或 XX 连接。
2. 应用协议端口(核心业务)
这是游戏客户端连接服务器的关键,根据技术栈不同而不同:
-
场景 A:Web 类小游戏 / HTTP API 后端
- 80 (TCP): HTTP 服务。
- 443 (TCP): HTTPS 服务。强烈建议开启,微信小程序等前端框架强制要求 HTTPS,否则会被浏览器或微信客户端拦截。
- 注意: 如果你的后端只处理 JSON 数据交互,通常只需要这两个端口。
-
场景 B:实时对战 / 长连接 / WebSocket
- 自定义 TCP 端口 (如 8080, 9000, 10000 等): 大多数游戏引擎(如 Cocos Creator, Unity, Laya)使用 WebSocket 或自定义 TCP 协议时,会监听非标准端口。
- 操作: 你需要在代码中指定一个端口(例如
server.listen(8080)),然后在腾讯云安全组中放行该端口的 TCP 流量。 - 示例: 如果游戏逻辑跑在 Node.js 的
ws库上,默认可能用 8080,那就放行 8080/TCP。
-
场景 C:UDP 游戏(如 IO 类游戏、简单动作游戏)
- 自定义 UDP 端口: 某些高性能低延迟游戏会使用 UDP 协议。
- 操作: 在安全组中添加规则,协议选择 UDP,端口填写你代码中绑定的端口。
二、 第三方服务依赖端口(极易被忽略)
很多开发者只盯着自己的服务器端口,却忘了游戏要调用的其他云服务也需要网络连通性。
1. 域名解析与 CDN(如果使用)
- 如果你为游戏后端配了域名,并确保 DNS 正常解析到 ECS 的公网 IP,那么不需要额外开通入站端口,但需要确保 ECS 出站允许访问 DNS(53/UDP 和 53/TCP),这通常是默认的。
2. 数据库连接
- MySQL/MongoDB/Redis:
- 如果数据库安装在同一台 ECS 上,使用
localhost或127.0.0.1连接,不需要在安全组开放数据库端口(3306, 6379 等)。 - 如果数据库是独立的云服务器或托管版(如 TDSQL, MongoDB 云数据库),且你的游戏服务器在内网,请确保两者在同一个 VPC(虚拟私有云)下,利用内网互通,无需开放公网端口。
- 警告: 绝对不要将数据库端口暴露在公网安全组中!这是黑客入侵的重灾区。
- 如果数据库安装在同一台 ECS 上,使用
3. 腾讯云其他增值服务
- 对象存储 COS: 用于上传头像、资源包。
- 游戏服务器如果需要从 COS 下载资源或上传图片,只需确保 ECS 有正确的 IAM 角色权限,网络层面默认可以访问 COS 的内网/公网 Endpoint。
- 即时通信 IM (TIM) / 音视频 TRTC:
- 如果游戏集成了聊天或语音功能,SDK 通常会建立 P2P 或中继连接。这些连接通常走 UDP 4000-5000 或 TCP 443。
- 关键点: 确保你的 ECS 安全组允许出方向(Outbound)访问腾讯云 IM/TRTC 的服务地址。入方向通常由腾讯云侧处理,除非你做了复杂的 NAT 穿透,一般只需关注 SDK 文档中的端口要求。
三、 操作系统内部防火墙(iptables/firewalld)
很多人开了腾讯云安全组,结果还是连不上,原因往往是 Linux 系统内部的防火墙没关或没配好。
- CentOS 7+ / Ubuntu:
- 检查
firewalld或ufw状态。 - 最简单粗暴的方法(测试阶段):临时关闭防火墙
systemctl stop firewalld或ufw disable。 - 生产环境建议:使用
firewall-cmd --add-port=8080/tcp --permanent等方式精确放行,然后重载配置firewall-cmd --reload。
- 检查
四、 小程序特殊注意事项
如果你做的是微信小程序小游戏:
- HTTPS 强制: 服务端必须支持 HTTPS(443 端口),并且证书必须是受信任的 CA 颁发的。自签名证书在微信环境中不可用。
- 域名备案: 服务器绑定的域名必须在工信部完成 ICP 备案,否则微信会拒绝连接。
- request 合法域名: 在游戏后台配置中,需要将你的服务器域名添加到“request 合法域名”列表中。
五、 总结清单(直接抄作业版)
假设你使用的是 ECS 自建 Node.js/Java/Go 服务器,运行 WebSocket + HTTP API 的小游戏:
| 端口 | 协议 | 方向 | 用途 | 备注 |
|---|---|---|---|---|
| 443 | TCP | 入站 | HTTPS | 小程序/API 必需,需配置 SSL 证书 |
| 80 | TCP | 入站 | HTTP | 可选,用于重定向到 HTTPS 或调试 |
| 8080 (举例) | TCP | 入站 | WebSocket | 替换为你代码实际监听的端口 |
| 22 | TCP | 入站 | SSH | 仅开发期建议开放,生产期建议限制 IP 或关闭 |
| 所有出方向 | 任意 | 出站 | 外部调用 | 允许 ECS 访问数据库、COS、IM 等服务 |
六、 避坑指南
- 先测通再发布: 在安全组添加规则后,使用
telnet <公网IP> <端口>或nc -vz <公网IP> <端口>从本地测试连通性,排除防火墙问题。 - NAT 网关 vs 弹性公网 IP: 如果有多台服务器,建议使用 NAT 网关统一出口,而不是给每台机器都挂 EIP,这样更安全且便于管理 IP 白名单。
- DDoS 防护: 小游戏容易成为攻击目标。建议购买腾讯云的基础 DDoS 防护(免费额度通常够用),或者将域名接入 CDN,隐藏源站 IP,只让 CDN 回源到你的服务器。
按照这个流程配置,基本能解决 90% 以上的端口连通性问题。如果有具体的游戏引擎或语言栈,可以再补充细节,我可以给出更针对性的配置建议。
云技术博客