Kong proxy-cache插件开启cache_control时X-Cache-Status始终为Bypass问题求助
问题原因与排查方案
当Kong的proxy-cache插件开启cache_control: true时,插件会同时校验请求和上游响应的Cache-Control规则,出现固定Bypass可按以下步骤排查:
1. 优先查看Bypass原因标识
开启cache_control后,插件Bypass时会自动返回X-Cache-Bypass响应头说明具体原因,先给curl命令加-v参数读取完整响应头:
curl -v --location --request GET 'http://localhost:8000/echo' --header 'Cache-Control: public, max-age=20'
直接根据X-Cache-Bypass的取值定位问题,常见取值包括上游返回了不可缓存的Cache-Control标识、请求头校验不通过等。
2. 检查上游响应的Cache-Control配置
cache_control: true时,仅请求头符合规则不会触发缓存,必须同时满足上游返回的响应头符合可缓存要求:
- 上游响应头不能包含
no-cache、no-store、private取值 - 上游响应头的
max-age必须大于0 - 不能返回
Vary: *响应头
3. 修复插件执行顺序问题
如果使用request-transformer修改请求头,注意Kong插件执行优先级:数值越小执行越早。proxy-cache默认优先级为100,request-transformer默认优先级为800,默认配置下request-transformer修改的请求头无法被proxy-cache读取,会导致校验不通过触发Bypass。
需要调整request-transformer的优先级到99及以下,确保先修改请求头再执行缓存校验逻辑。
4. 校验配置文件语法
你提供的配置中response_code字段后缺少冒号,属于YAML语法错误,会导致该配置项不生效,正确写法为:
plugins: - name: proxy-cache service: echo config: response_code: # 此处必须加冒号 - 200 - 301 - 404 request_method: - GET - HEAD content_type: - text/plain - application/json - application/json; charset=utf-8 - text/plain; charset=utf-8 cache_ttl: 300 strategy: memory cache_control: true memory: dictionary_name: kong_db_cache
修改配置后重载Kong配置生效。
内容的提问来源于stack exchange,提问作者dixy
相关产品推荐
相关产品推荐

