如何在宝塔面板中设置304协商缓存?
美国、香港服务器
如何在宝塔面板中设置304协商缓存?
04-03 来源:
在宝塔面板中开启 304 协商缓存,核心是:启用 ETag / Last-Modified + 配置正确的 Cache-Control 头。宝塔(Nginx 默认)已自动支持,但需手动优化缓存头。
一、Nginx 环境(宝塔默认,推荐)
1. 进入站点配置
宝塔 → 网站 → 你的站点 → 设置
切换到 配置文件
2. 添加缓存配置(直接复制)
在 server { ... } 内,找到或添加如下配置:
nginx
# 全局必须开启(宝塔默认已开)
sendfile on;
etag on; # 开启 ETag
if_modified_since on; # 开启 Last-Modified
# 静态资源:强缓存 + 304协商(最佳)
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|svg|mp4)$ {
# 缓存30天,过期后强制走304校验
add_header Cache-Control "public, max-age=2592000, no-cache";
expires 30d;
}
# HTML/动态页面:纯304协商(不做强缓存)
location ~* \.(html|htm|php)$ {
add_header Cache-Control "public, no-cache, must-revalidate";
expires 0;
}
no-cache = 强制浏览器每次都发请求做 304 校验(不是不缓存)
public = 允许 CDN 缓存
3. 保存 → 重启 Nginx
点击 保存,然后:
宝塔 → 软件商店 → 已安装 → Nginx → 重启
二、Apache 环境(.htaccess)
如果用 Apache:
进入 网站 → 设置 → 伪静态
粘贴以下规则:
apache
# 静态资源
Header set Cache-Control "public, max-age=2592000, no-cache"
FileETag MTime Size
# HTML/PHP
Header set Cache-Control "public, no-cache, must-revalidate"
Header set Expires "Thu, 01 Jan 1970 00:00:00 GMT"
保存 → 重启 Apache
三、CDN 配合设置(必须)
如果你用了 CDN(阿里云 / 腾讯云 / Cloudflare):
缓存规则
静态文件:缓存 30 天,强制缓存:关闭
HTML:缓存 0 秒(不缓存)
回源头
开启 透传 If-None-Match、If-Modified-Since(默认一般已开)
禁止
过滤 ETag / Last-Modified
开启 “忽略 Query 参数”
四、验证 304 是否生效
浏览器 F12 → Network
刷新页面
状态列出现:304 Not Modified
响应头必须有:
ETag: "xxx..."
Last-Modified: ...
Cache-Control: ..., no-cache
五、常见问题
一直 200,不 304
没开 etag on / if_modified_since on
写成 no-store(完全不缓存)
CDN 过滤了校验头
Nginx 不生成 ETag
确保 sendfile on;
不是反向代理(proxy_pass),是直接文件服务
六、最佳实践
静态资源:max-age=30天 + no-cache(强缓存 + 304 降级)
HTML / 动态:no-cache(纯 304)
更新资源:用 版本号(style.css?v=2)或 文件名哈希
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快