百度云防护接入优化:配置静态资源缓存,降低服务器带宽压力

一、为什么缓存对网站这么重要

网站加载慢、服务器带宽不够用,是站长最常遇到的两个问题。很多人的第一反应是升级服务器配置,但忽略了一个成本更低、效果更好的手段——缓存。

当用户访问一个网站时,浏览器需要下载 HTML、图片、CSS、JS 等资源。如果每次访问都要从源服务器拉一遍,服务器带宽会很快被打满,用户等待时间也会变长。

接入百度云防护 WAF 后,静态资源可以被缓存到 WAF 节点上。用户的请求直接由节点返回,不再回源到服务器,源服务器只需要处理动态请求即可。

一个常见的误区是:接入 WAF 后缓存会自动生效。 实际上不一定。

二、大部分站长遇到的问题

很多网站在接入百度云防护后,发现缓存命中率很低,甚至完全没有命中。去查了下才知道,WAF 默认遵循源站的缓存策略。

也就是说:

  • 你的服务器设置了 Cache-Control: no-cache
  • WAF 严格遵循源站策略,不缓存
  • 每次请求都回源到服务器
  • 服务器带宽照常消耗,接入 WAF 只是多了层防护,没起到缓存加速的作用

这个问题在宝塔面板用户中尤其常见,因为宝塔部分版本的默认配置会输出 no-cache 响应头。

三、Cache-Control 响应头的工作原理

什么是 Cache-Control

Cache-Control 是一个 HTTP 响应头,告诉浏览器和 CDN 节点这个资源能不能缓存、能缓存多长时间。

Cache-Control: public, max-age=86400

上面这行的意思是:资源可以被公共缓存(CDN 节点)缓存,缓存有效期为 86400 秒(24 小时)。

关键参数说明

参数含义建议值
public允许所有缓存节点缓存静态资源使用
private仅允许浏览器缓存,CDN 不缓存动态页面使用
no-cache不缓存,每次都回源验证不要对静态资源使用
max-age=秒缓存过期时间图片 86400(1 天),CSS/JS 604800(7 天)

为什么攻击者会利用 no-cache

最近发现一类攻击:攻击者发送的请求头中携带 Cache-Control: no-cache,强制 CDN 节点回源拉取资源。如果源站没有限制回源频率,大量此类请求会直接把源站带宽打满。

百度云防护接入优化:配置静态资源缓存,降低服务器带宽压力

启用节点缓存后,即使攻击者发送 no-cache 请求,已缓存的资源也仍然由节点直接返回,不会回源到服务器。 这是缓存策略在安全层面带来的额外收益。

四、在不同 Web 服务器上设置 Cache-Control

要让百度云防护 WAF 节点缓存静态资源,先要在源服务器上配置正确的响应头。

Nginx

找到网站配置文件(宝塔路径 /www/server/panel/vhost/nginx/你的域名.conf),在 server 块中添加:

nginx

location ~* \.(jpg|jpeg|png|gif|webp|svg|ico|css|js|woff|woff2|ttf|eot)$ {
    expires 7d;
    add_header Cache-Control "public, max-age=604800, immutable";
}

bash

# 重启 Nginx
nginx -s reload

参数说明:

  • expires 7d:设置过期时间为 7 天
  • public:允许 CDN 和浏览器缓存
  • max-age=604800:缓存有效期(秒),604800 = 7 天
  • immutable:告诉浏览器该资源永远不会变,可以放心使用缓存(适用于带版本号的静态资源)

如果 CSS/JS 文件名不带版本号,去掉 immutable 参数:

nginx

location ~* \.(jpg|jpeg|png|gif|webp|svg|ico|css|js|woff|woff2|ttf|eot)$ {
    expires 7d;
    add_header Cache-Control "public, max-age=604800";
}

Apache

在 .htaccess 或虚拟主机配置中添加:

apache

<FilesMatch "\.(jpg|jpeg|png|gif|webp|svg|ico|css|js|woff|woff2|ttf|eot)$">
    Header set Cache-Control "public, max-age=604800"
</FilesMatch>

bash

# 重启 Apache
systemctl restart httpd

IIS

IIS 通过 web.config 文件配置。在网站根目录的 web.config 中添加:

xml

<configuration>
  <system.webServer>
    <staticContent>
      <clientCache cacheControlMode="UseMaxAge" 
                   cacheControlMaxAge="7.00:00:00" 
                   setEtag="true" />
    </staticContent>
  </system.webServer>
</configuration>

或者在 IIS 管理器中操作:

IIS 管理器 → 你的网站 → HTTP 响应标头
→ 添加:
  名称:Cache-Control
  值:public, max-age=604800

宝塔面板(图形化操作)

如果你的网站跑在宝塔面板上,可以直接在面板里设置,不用手动改配置文件:

宝塔面板 → 网站 → 你的域名 → 设置 → 配置文件

在 server 块中找到 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 部分
将 expires 修改为 7d
将 add_header Cache-Control 修改为 "public, max-age=604800"

同样在 location ~ .*\.(js|css)?$ 部分也做同样的修改

然后重启 Nginx。

五、在百度云防护中开启缓存

配置完源服务器后,进入百度云防护控制台开启缓存功能。

步骤一:开启网页防篡改缓存

百度云防护控制台 → 防护配置 → Web 防护 → 网页防篡改

进入后找到缓存配置,开启缓存开关。

百度云防护接入优化:配置静态资源缓存,降低服务器带宽压力

步骤二:配置缓存文件类型

在缓存规则中添加需要缓存的静态资源后缀。建议配置以下类型:

图片类:jpg, jpeg, png, gif, webp, svg, ico, bmp
样式类:css, less, scss
脚本类:js, jsx, ts, vue
字体类:woff, woff2, ttf, eot
媒体类:mp4, webm, ogg, flv
文档类:pdf, doc, docx, xls, xlsx

步骤三:配置缓存过期时间

根据资源类型设置合理的过期时间:

资源类型建议缓存时间说明
带版本号的 CSS/JS30-365 天文件名含 hash 值
不带版本号的 CSS/JS1-7 天更新后及时生效
图片(JPG/PNG/WebP)7-30 天一般不频繁变动
字体文件30-365 天几乎不变
图标/Logo30-90 天更新频率低

六、验证缓存是否生效

配置完成后,浏览器里看是否生效:

打开浏览器按 F12Network 标签

刷新页面,找到图片请求

看右侧 Response Headers

Yjs-Cachestatus: HIT → WAF 缓存命中

没有这行 → 你没有开启在WAF开启缓存或者没有设置缓存这个后缀的文件

有这行但显示miss → 缓存没有命中,图片第一次加载或者缓存刷新导致,或者源服务器配置了Cache-Control:no-cache 禁止缓存,需要进入服务器修改响应头为:Cache-Control:public

百度云防护接入优化:配置静态资源缓存,降低服务器带宽压力

七、缓存前后的数据对比

以一个日均 PV 5 万、图片资源占 60% 流量的资讯站为例:

指标优化前优化后
静态资源回源比例100%约 10-20%
源站带宽消耗100 Mbps15-20 Mbps
页面加载时间3.2 秒1.1 秒
服务器 CPU60-80%20-30%

静态资源缓存是性价比最高的优化手段,不需要升级服务器配置,只需要修改几行配置就能达到明显效果。

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
在线客服
在线客服
热线电话
QQ客服
电子邮箱
suduwangluo