需在宝塔面板中通过站点级Nginx配置实现独立反向代理缓存:一、自定义proxy_cache_path与proxy_cache指令;二、用map动态生成cache_key;三、用if+proxy_no_cache跳过特定请求;四、为静态资源设专用cache_zone与缓存策略。

如果您在宝塔面板中托管多个网站,并希望为其中某个特定站点配置独立的反向代理缓存逻辑(如仅对该站启用缓存、设置专属缓存键、跳过特定路径缓存等),则需绕过全局反向代理缓存配置,采用站点级 Nginx 配置片段实现精细化控制。以下是具体操作步骤:
一、通过站点配置文件插入自定义 proxy_cache 指令
宝塔面板允许在站点配置中添加自定义 Nginx 配置,从而为该站点独立声明 cache_zone、cache_key、cache_valid 等指令,不与其他站点共享缓存区域或策略。
1、登录宝塔面板,进入【网站】列表,点击目标站点右侧的【设置】按钮。
2、切换到【配置文件】选项卡,在 location / { 块上方空白处(或在 server 块内合适位置)插入以下缓存区定义:
proxy_cache_path /www/server/nginx/proxy_cache/example_com levels=1:2 keys_zone=example_com:10m max_size=1g inactive=1h use_temp_path=off;
3、在该站点的反向代理 location 块中(例如 location ^~ /api/ { 或 location / {),添加缓存控制指令:
proxy_cache example_com;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
4、保存配置后,点击【重载配置】使 Nginx 重新加载生效。
二、使用 map 指令动态生成独立 cache_key
通过 Nginx 的 map 模块可基于 Host、请求路径或 Cookie 动态构造 cache_key,确保不同子域名或用户会话的响应不被错误复用,实现逻辑隔离。
1、在宝塔面板【软件商店】中确认已安装并启用 Nginx(建议版本 ≥1.11.6),且未禁用 map 模块。
2、进入【网站】→【设置】→【配置文件】,在 http { 块顶部(即 server 块外)添加 map 定义:
map $host$request_uri $custom_cache_key {
default "$host$request_uri";
~^www\.example\.com$ "$host$request_uri$args";
~^blog\.example\.com$ "$host$request_uri";
}
3、在对应站点的 location 块中,将原 proxy_cache_key 替换为:
proxy_cache_key $custom_cache_key;
4、保存配置并重载 Nginx。
三、通过 if 指令按条件跳过缓存
利用 if 判断请求头、Cookie 或 URI 路径,对特定流量(如含 auth_token 的请求、后台接口、调试路径)主动 bypass 缓存,保障数据实时性与安全性。
1、在站点配置文件的 location 块内(位于 proxy_pass 上方),插入缓存绕过逻辑:
if ($http_cookie ~* "auth_token|debug_mode") {
set $skip_cache "1";
}
if ($request_uri ~* "^/(admin|api/v2|__debug__)") {
set $skip_cache "1";
}
2、在同 location 块中添加缓存开关指令:
proxy_no_cache $skip_cache;
proxy_cache_bypass $skip_cache;
3、确保该 location 已启用 proxy_cache(参考第一部分),否则 skip 指令无效。
4、保存配置并重载 Nginx。
四、为静态资源启用独立缓存策略
针对 CSS、JS、图片等静态资源,可通过匹配后缀的 location 块单独配置更长缓存周期与专用 cache_zone,避免与动态内容共用同一缓存区导致驱逐干扰。
1、在站点配置文件的 server 块内,新增独立 location 块:
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2|ttf|eot)$ {
proxy_pass http://127.0.0.1:8080;
proxy_cache static_assets;
proxy_cache_valid 200 302 1d;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500;
expires 1d;
add_header X-Cache-Status $upstream_cache_status;
}
2、在 http 块顶部(server 外)预先定义该 cache_zone:
proxy_cache_path /www/server/nginx/proxy_cache/static levels=1:2 keys_zone=static_assets:50m max_size=5g inactive=3d use_temp_path=off;
3、保存配置并重载 Nginx。










