反向代理缓存是指将用户请求先转发到代理服务器,由代理服务器向真实源站获取内容,并把响应暂存下来,后续相同请求直接由代理返回。宝塔面板基于Nginx提供图形化配置,让不熟悉命令行的用户也能快速搭建带缓存的代理层。合理使用缓存能大幅降低源站CPU与带宽消耗。

一、在宝塔中创建站点并开启反向代理
首先登录宝塔面板,在网站菜单中点击添加站点,填写一个用于代理的域名,例如 cache.ippipp.com,PHP版本选择纯静态即可,因为请求都会转给后端。站点创建完成后,进入该站点的设置页面,切换到反向代理标签页,点击添加反向代理。
在弹出的配置框中,代理名称可随意填写,目标URL填写真实源站地址,如 http://192.168.0.1:8080。发送域名一般保持与目标一致。保存后宝塔会自动生成基础的Nginx代理配置。此时访问代理域名已能拿到源站内容,但还没有缓存能力,每次都会回源。
# 宝塔自动生成的简化代理配置示例
location / {
proxy_pass http://192.168.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
二、手动加入Nginx缓存路径与规则
图形界面暂未提供完整的缓存开关,我们需要点击站点设置中的配置文件,在server块外定义缓存区。使用proxy_cache_path指令指定缓存目录、层级、键区大小及最大容量。该目录需确保Nginx运行用户有读写权限,宝塔默认www用户通常已具备。
接着在location中引用缓存区,并通过proxy_cache_key组合请求方法、域名与URI,添加Cache-Control头部方便调试。设置proxy_cache_valid对不同状态码设定缓存时间,例如200响应缓存十分钟。下方代码展示了完整片段,注意内部特殊字符已转义。
# 在http或server同级定义,宝塔一般在server外
proxy_cache_path /www/wwwroot/cache_proxy levels=1:2 keys_zone=mycache:10m max_size=1g inactive=60m use_temp_path=off;
server {
listen 80;
server_name cache.ipipp.com;
location / {
proxy_pass http://192.168.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 开启缓存
proxy_cache mycache;
proxy_cache_key $scheme$proxy_host$request_uri;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status;
}
}
三、缓存命中状态与常见误区
上面配置中输出的X-Cache-Status头非常关键,它会有MISS、HIT、BYPASS等值。HIT代表直接从缓存返回,MISS表示回源并可能写入缓存,BYPASS常见于请求带禁止缓存头。通过浏览器开发者工具查看该头,可快速判断配置是否生效。
一个常见误区是不加区分地缓存所有请求。若源站通过Cookie区分用户会话,而代理缓存键未包含Cookie,就会导致用户A看到用户B的私有页面。解决方式是在proxy_cache_key中追加$http_cookie,或对带Cookie的请求使用proxy_cache_bypass。下表列出两种策略差异。
| 场景 | 缓存键设计 | 风险 |
|---|---|---|
| 纯公开内容 | 仅URI与域名 | 无,性能最佳 |
| 含用户态接口 | 追加Cookie或跳过缓存 | 遗漏则串号 |
四、清理缓存与持久化建议
当源站内容更新后,代理缓存可能返回旧数据。宝塔未提供一键清缓存按钮,但可直接删除定义的缓存目录文件,或编写定时任务在发布后清理。生产环境建议对图片、脚本等静态资源设较长缓存,对HTML接口较短,并配合源站Cache-Control头做精细控制。
另外,缓存目录应放在磁盘读写快的路径,并监控占用避免写满。若代理层前面还有CDN,需理清多层缓存关系,防止边缘节点与宝塔代理双重缓存造成更新延迟。经过上述步骤,你便能利用宝塔面板以较低门槛构建稳定的反向代理缓存体系。