4.3 HTTPS 与安全防护:上线前必做的四件事
图片社区刚上线时我用的是 HTTP,理由很实在:证书要钱、配置麻烦、就一个小破站。直到有一天我在咖啡店连公共 Wi-Fi 打开自己的站,随手抓包看到登录请求里的验证码会话明文可见,当天晚上就上了 HTTPS。对图片站来说,HTTPS 不只是绿色小锁,更是信任底线——用户愿意把照片传给你,你连传输都不加密说不过去。
这一节整理上线 CDN 前我认为必做的四件事,配套的官方入口是内容分发网络 CDN 文档。
第一件:HTTPS 证书与强制跳转
CDN 上配 HTTPS 有两种方式:用平台提供的免费证书,或上传自有证书。我选了免费证书(DV 级),申请后自动部署到 CDN 节点,全程没花一分钱。
| 证书获取方式 | 成本 | 部署方式 | 适合谁 |
|---|---|---|---|
| 平台免费 DV 证书 | 0 元 | 控制台一键申请部署 | 个人站、小项目 |
| 上传自有证书 | 证书本身的费用 | 手动上传 key 与证书 | 企业已有通配证书 |
| 云证书管理服务 | 按证书类型 | 统一管理多产品部署 | 多域名多业务 |
配好证书后一定要打开强制 HTTPS 跳转:用户输入旧 HTTP 地址时,节点返回 301 跳到 HTTPS。不打开的话,用 HTTP 访问的请求会以明文走到节点,加密等于半残。
注意:301 跳转是永久重定向,配置后旧 HTTP 地址会被浏览器缓存。如果之后想退回 HTTP 会很麻烦,确认好再开。
证书还有个续期问题。免费 DV 证书有效期是一年(具体以控制台显示为准),到期前需要重新申请部署。我那时候在控制台开启了证书到期提醒,避免出现“证书过期导致全站浏览器红色警告”这种灾难级事故——这种事在小站上太常见了,一次就够你长记性。证书到期前半个月控制台会开始提示,跟着提示重新走一遍申请流程即可,全程不超过五分钟。
顺带一个长期维护思路:随着业务变多,站点上要管的安全配置只增不减。我的做法是每季度对着清单过一遍:证书有效期、防盗链白名单是否覆盖新加的子站、IP 黑名单里有没有该解封的历史条目。清单不长,半小时能搞完,但能防止小问题攒成大事故。这事和代码做 code review 一个道理——拖得越久,欠的债越多。
第二件:启用 HTTP/2
HTTPS 配好后,顺手把 HTTP/2 打开。HTTP/2 支持多路复用,一个连接上并行传输多个文件,对图片详情页这种一屏二十张缩略图的场景提升明显。开启选项在 CDN 域名配置里,开关式的,勾上保存即可,前提是该域名已配置 HTTPS。
实测我的详情页在 HTTP/2 下,20 张缩略图的总加载时间比 HTTP/1.1 少了约 30%。这个数值仅供参考,但方向是确定的:并行传输对多图页面就是更友好。
经手过这一层的配置后我最大的感受是:看似是开关,背后都是链路。HTTP/2 要求全链路 HTTPS,浏览器对 HTTP/2 还要求 TLS 1.2 以上。如果你的证书或协议版本配置过旧,开关开了也不会生效——这就是为什么这类配置改完一定要实地验证:多个网络环境、多个浏览器各打开一遍,别只在自己的环境里自测。站点层面的性能优化还有很多维度,可以看我另一本站点地理优化实战。
第三件:防盗链
图片站的流量是钱。我的一个月流量费里,曾有相当一部分是被别的站点直接引用图片耗掉的——对方网页里嵌着我的图址,用户的请求打到我的 CDN 上,账单寄给我。
防盗链配置生效有几分钟延迟,配完别立刻测试就觉得没生效。另外 Referer 为空的请求(部分浏览器隐私模式、直接在地址栏粘贴图片地址)属于特殊情形,可以选择拒绝也可以选择放行——我选择放行,因为给自己看图也算正常用途,这个取舍按你的业务来。
防盗链的核心是 Referer 白名单:节点检查请求头里的 Referer,不在白名单里的请求直接拒绝或返回一张占位图。我的配置是允许自己的域名、常见的几个合法页面来源,其它一律拒绝。这个功能在 COS 和 CDN 上都能配,两道防线一起上更稳,COS 侧的配置可以参考本系列对象存储那篇的思路,通用方法见对象存储防盗链相关的官方文档入口。
| 防护手段 | 拦截对象 | 局限 | 我的用法 |
|---|---|---|---|
| Referer 白名单 | 站外网页直接引用 | 可伪造 Referer | 主力防线 |
| IP 黑白名单 | 恶意高频 IP | 误伤正常用户 | 只封明确异常 IP |
| UA 过滤 | 爬虫/采集器 | 正常 UA 也能伪装 | 降低被采集量 |
| 时间戳鉴权 | 盗用地址分发 | 配置较复杂 | 私有分享场景 |
第四件:IP 黑白名单与 UA 过滤
Referer 防的是站外嵌入,IP 黑白名单防的是恶意流量。我在 CDN 上遇到过一次小规模的图片接口被刷,单个 IP 每秒几百次请求。先把该 IP 加进黑名单止血,再把日志里的异常段一起处理,当天的曲线就平了。
UA 过滤我用得克制,只拦截了几个明显采集工具的 UA。原因很简单:这一层误伤正常用户的成本远高于放过几个爬虫。防护配置不在多,在于准确。
提示:黑名单是临时止血手段,如果一个 IP 段能持续刷你,说明对方是分布式 IP,这时候该考虑的是下一层——DDoS 防护。
中场检查:一张清单过一遍
四件事做完后,我给自己整理了一张上线前检查清单,逐项确认才算心安:
| 检查项 | 确认内容 | 是否完成 |
|---|---|---|
| HTTPS 证书 | 证书已部署且未过期 | 已完成 |
| 强制跳转 | HTTP 访问返回 301 到 HTTPS | 已完成 |
| HTTP/2 | 域名配置里已开启 | 已完成 |
| 防盗链 | Referer 白名单含本站域名 | 已完成 |
| IP/UA 规则 | 只封确切异常来源 | 已完成 |
| 回源协议 | 与源站实际监听一致 | 待确认 |
最后一项是特别容易漏的:回源协议。CDN 回源时用什么协议访问源站,要和源站实际监听的端口对上。如果源站只开了 443 而 CDN 用 HTTP 回源到 80 端口,所有请求都会失败。我在这里栽过一次——配完证书后顺手把回源协议改成了 HTTPS,却忘了 CVM 上的 Nginx 那时还没配证书,整站直接短暂宕线十分钟。改配置时盯着监控大盘,出问题马上回滚。监控与告警的搭建可以看1Panel 常见问题里关于服务健康检查的部分,思路是通用的。
DDoS 防护:基础防护打不住的时候
腾讯云 CDN 自带基础 DDoS 防护,小规模的流量攻击能扛住。但如果你的站被盯上了,攻击量超过基础防护阈值,会出现干脆整个域名不可用的情况。我没遇到过大规模攻击,但选型时做过功课:流量超过基础防护能力时,需要 DDoS 高防(大禹)这类独立的高防产品,把域名解析切到高防 IP 上,由它牵引清洗后再回源。
| 攻击规模 | 防护方案 | 成本量级 |
|---|---|---|
| 小规模流量冲击 | CDN 基础 DDoS 防护 | 已含在 CDN 内 |
| 中等规模 | 高防 IP(大禹)保底包 | 按月付费 |
| 大规模持续攻击 | 高防 IP 弹性扩容 | 按防护峰值计费 |
如果你判断自己的业务有被攻击的风险(比如有竞争摩擦的社区、风口业务),可以提前了解一下DDoS 高防解决方案,先把预案放兜里,真遇事不慌。顺便也给自己的主业务要了个福利位:云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中,配 CDN 的时候顺手把证书、安全这些周边一起规划好,比出事再补便宜得多。
