我们一直在使用NGINX作为缓存层,最近在对其进行负载测试时,我们偶然发现了一个不寻常的问题:负载测试只会在所有内容上获得缓存未命中。
交通流是这样的:
客户端>NLB>NGINX>ELB(粘性)>应用程序层
经过一些分析和故障排除,我得出结论,导致这种行为的原因是在我们的负载注入器发送的请求中缺少“awselb”粘性cookie。
未设置cookie时,AWS ELB将发送带有AWSELB值的“set cookie”,还将包含
cache control:no cache=“设置cookie”
.
由于NGINX有一个“no cache”指令,因此除非发送cookie,否则NGINX最终不会创建预期的缓存条目(此后的请求将具有缓存命中行为)。
我浏览了很多链接/问题和文档,但是到目前为止我还没有找到解决方案。
有人经历过吗?你是怎么处理的?
样本请求:
GET /asset/style.1234567.css HTTP/2
Host: mytestserver
User-Agent: curl/7.54.0
Accept: */*
响应片段示例:
< HTTP/2 200
< server: nginx
< date: Tue, 04 Dec 2018 16:35:50 GMT
< content-type: text/css; charset=UTF-8
< content-length: 572353
< accept-ranges: bytes
< cache-control: public, max-age=3600
< cache-control: no-cache="set-cookie"
< set-cookie: AWSELB=VERYBIGCOOKIEWITHAWSELBDETAILS;PATH=/;MAX-AGE=60
< x-proxy-cache: MISS
我看到的最接近我的问题签名的帖子/文章,但适用于CloudFront,没有任何关于如何处理的细节:
https://forums.aws.amazon.com/thread.jspa?messageID=362272