nginx二级代理架构需分层明确职责:边缘层专注快速就近缓存,精简键值、屏蔽干扰参数;中心层承担仲裁决策,控制回源节奏与失效粒度,并通过版本化缓存键和purge接口保障多级缓存一致性。

配置 Nginx 二级代理架构实现边缘缓存与中心缓存协同,关键在于明确两层职责、隔离缓存策略、控制请求流向,并保障失效一致性。不是简单叠加两个 proxy_cache,而是让边缘节点专注“快”,中心节点专注“准”和“控”。
边缘层:就近缓存,精简键值,屏蔽干扰参数
边缘 Nginx 部署在区域机房或 CDN 边缘节点,直面用户流量:
- 定义专用缓存区:proxy_cache_path /var/cache/nginx/edge levels=1:2 keys_zone=edge_cache:20m max_size=5g inactive=24h use_temp_path=off;
- 只对静态资源启用缓存,例如:location ~* \.(js|css|png|jpg|woff2|svg)$ { proxy_cache edge_cache; ... }
- 清理 URL 中的跟踪参数,避免相同资源因 utm_source 或 __t=171xxxx 生成多个缓存项:proxy_cache_key "$scheme$host$request_uri";(不包含 $args)
- 统一缓存成功响应:proxy_cache_valid 200 301 302 1h; 对 404 做短时缓存防穿透:proxy_cache_valid 404 1m;
- 添加响应头便于观测:add_header X-Cache-Status $upstream_cache_status;
中心层:缓存仲裁,控制回源节奏与失效粒度
中心 Nginx 位于边缘之后、源站之前,不追求高命中率,而是做决策中枢:
- 启用缓存锁防止雪崩:proxy_cache_lock on; 并设置超时避免阻塞:proxy_cache_lock_timeout 5s;
- 缓存策略更保守,例如:proxy_cache_valid 200 10m; proxy_cache_valid 302 1m;(避免边缘缓存过期后仍从中心拿到陈旧跳转)
- 对带 Cookie 或认证头的请求主动绕过缓存:proxy_cache_bypass $http_cookie $arg_auth_token;
- 强制中心层校验边缘未命中请求的合法性,例如添加标识头:proxy_set_header X-Forwarded-By "nginx-center";
- 启用后台更新机制,避免用户等待:proxy_cache_use_stale updating; proxy_cache_background_update on;
源站配合:最小暴露,规范响应头,禁用协商缓存
源站不应直接响应公网请求,只服务可信中心代理:
- 校验请求头:if ($http_x_forwarded_by != "nginx-center") { return 403; }
- 对静态资源返回明确的缓存指令:add_header Cache-Control "public, max-age=3600";
- 对 HTML 等动态入口,禁用代理缓存:add_header Cache-Control "private, no-store";
- 关闭源站对条件请求的响应(由 Nginx 统一处理):etag off; if_modified_since off;
一致性保障:主动刷新 + 版本化缓存键
多级缓存无法自动同步,需靠机制驱动一致:
- 构建发布时,在响应头中注入版本标识:X-Content-Version: v20260527a
- 边缘与中心均将该头纳入缓存键:proxy_cache_key "$scheme$host$request_uri$http_x_content_version";
- 中心层开放 PURGE 接口,供运维平台批量调用清除指定路径:location ~ /purge(/.*) { allow 10.10.0.0/16; proxy_cache_purge edge_cache "$scheme$request_uri"; }
- 边缘节点故障或源站不可达时,启用保底策略:proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;











