POST response caching does not work in nginx
我的任务是使用nginx实施微缓存策略,即将某些POST端点的响应缓存几秒钟。
在
1 | proxy_cache_path /tmp/cache keys_zone=cache:10m levels=1:2 inactive=600s max_size=100m; |
然后我在
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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; } |
位于
但是当我在短时间内(不到10秒)使用curl发出重复请求时
1 | curl -v --data"a=b&c=d" https://my-host/my-url/1573 |
它们都到达后端(根据后端日志)。 同样,
请求和响应如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | > POST /my-url/1573 HTTP/1.1 > Host: my-host > User-Agent: curl/7.47.0 > Accept: */* > Content-Length: 113 > Content-Type: application/x-www-form-urlencoded > * upload completely sent off: 113 out of 113 bytes < HTTP/1.1 200 OK < Server: nginx < Date: Tue, 08 May 2018 07:16:10 GMT < Content-Type: text/html;charset=utf-8 < Transfer-Encoding: chunked < Connection: keep-alive < Keep-Alive: timeout=60 < Vary: Accept-Encoding < X-XSS-Protection: 1 < X-Content-Type-Options: nosniff < Strict-Transport-Security: max-age=31536000 < Cache-Control: max-age=10 < Content-Language: en-US < X-Cached: MISS |
因此,缓存不起作用。
事实证明,以下指令(已全局定义)阻止了缓存工作:
1 | proxy_buffering off; |
当我使用
因此,要使高速缓存能够处理POST请求,我们必须执行以下操作: