POST响应缓存在nginx

时间:2018-05-08 07:29:13

标签: nginx caching post

我的任务是使用nginx实现微处理策略,即一些POST端点的缓存响应几秒钟。

http的{​​{1}}部分,我有以下内容:

nginx.conf

然后我在proxy_cache_path /tmp/cache keys_zone=cache:10m levels=1:2 inactive=600s max_size=100m; 中有location

server

位于 location /my-url/ { root dir; client_max_body_size 50k; proxy_cache cache; proxy_cache_valid 10s; proxy_cache_methods POST; proxy_cache_key "$request_uri|$request_body"; proxy_ignore_headers Vary; add_header X-Cached $upstream_cache_status; proxy_pass http://my-upstream; } 输出my-upstream的应用程序,如果我理解正确,应该使响应可以缓存。

但是当我在短时间内(少于10秒)使用curl进行重复请求时

Cache-Control: max-age=10

所有这些都到达后端(根据后端日志)。此外,curl -v --data "a=b&c=d" https://my-host/my-url/1573 始终为X-Cached

请求和回复如下:

MISS

所以缓存不起作用。

  1. 我在这里做错了什么?
  2. nginx中是否有任何日志工具可以查看为什么选择不缓存响应?

1 个答案:

答案 0 :(得分:0)

事实证明,以下指令(全局定义)阻止了缓存工作:

proxy_buffering off;

当我使用locationproxy_buffering on;配置下覆盖它时,缓存开始工作。

因此,要使缓存与POST请求一起使用,我们必须执行以下操作:

  1. 服务器上的输出Cache-Control: public, max-age=10标题
  2. 在nginx中添加proxy_cache_path配置和location配置(示例在问题文本中提供)
  3. 确保proxy_bufferingon,表示我们要启用缓存的位置。