![NGINX:我可以将 proxy_no_cache 指令与上游响应主体一起使用进行条件缓存吗?](https://linux22.com/image/773856/NGINX%EF%BC%9A%E6%88%91%E5%8F%AF%E4%BB%A5%E5%B0%86%20proxy_no_cache%20%E6%8C%87%E4%BB%A4%E4%B8%8E%E4%B8%8A%E6%B8%B8%E5%93%8D%E5%BA%94%E4%B8%BB%E4%BD%93%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8%E8%BF%9B%E8%A1%8C%E6%9D%A1%E4%BB%B6%E7%BC%93%E5%AD%98%E5%90%97%EF%BC%9F.png)
我们在第三方服务前面使用 Ngnix 作为缓存代理,并有以下指令来确保状态代码为 200 的上游响应被缓存...
proxy_cache_valid 200 364d
问题是,当给定的搜索未找到任何结果时,第三方服务会返回 200。响应主体中的 JSON 参数会指示这一点docs: []
。
是否可以proxy_no_cache
在上游主体内容上使用 或任何其他带有正则表达式的指令,以便我们不会缓存这些“空”响应?也不存在指示“空”响应的标头。
短暂性脑缺血发作
答案1
不。nginx 不会将响应有效负载作为变量提供。这是执行此类操作所需的最低要求。
您可以创建另一个应用程序来执行上游请求、解析响应并设置 HTTP 标头,以告知 nginx 是否应缓存响应。或者它可以直接为空响应设置 404 响应。