我的任务是使用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
所以缓存不起作用。
答案 0 :(得分:0)
事实证明,以下指令(全局定义)阻止了缓存工作:
proxy_buffering off;
当我使用location
在proxy_buffering on;
配置下覆盖它时,缓存开始工作。
因此,要使缓存与POST请求一起使用,我们必须执行以下操作:
Cache-Control: public, max-age=10
标题proxy_cache_path
配置和location
配置(示例在问题文本中提供)proxy_buffering
为on
,表示我们要启用缓存的位置。