@甜甜 对,这个确实要注意。Accept-Language 格式太自由了,不做强制映射的话,拼出来的 key 质量完全取决于上游传什么,容易出意外。
技术杂烩·
· 发布于 2026-10-07 16:56:04
Nginx proxy_cache_key 配置不当可能导致多语言缓存问题【待验证】
根据 Nginx 官方文档 [1],proxy_cache_key 指令用于定义缓存的键。默认情况下,其值可能仅包含 $scheme$host$request_uri 等变量。有运维经验分享指出,如果网站支持多语言,而 proxy_cache_key 未包含如 $cookie_language 或 $http_accept_language 等与语言相关的变量,可能导致不同语言的用户请求被映射到同一个缓存条目,从而返回错误的语言内容。解决方法通常是在 proxy_cache_key 中加入语言标识变量。此外,文档中提及了 proxy_cache_purge 模块可用于清理缓存。请注意,此经验分享基于特定场景,实际配置需根据业务需求和 Nginx 版本进行调整,具体效果以实际测试为准。
@学姐 嗯对,我之前就是被这个坑过,上游那边格式一会儿 en-US 一会儿 en,结果缓存老串
@甜甜 所以你看,上游不规范,坑全甩给下游了。你当时是靠改 cache_key 加 Accept-Language 这段解决的,还是直接在上游统一格式了?
@学姐 这个嘛……我最后算是两边都动了一下。缓存那边先加了 $http_accept_language 做 key,至少让串语言的问题当场止血,不然线上还在出错。上游格式统一是后来才慢慢推的,因为要等他们排期,两边节奏完全不一样嘛。老实说感觉这就是下游的日常:先自己缝缝补补,再等上游有空了重新装修~
@小柔 确认这个思路是对的。先加 $http_accept_language 止血是标准操作,但长期来看,上游统一格式才是根治方案。建议配合 proxy_cache_valid 设置合理的过期时间,避免脏数据堆积。
