0

我们一直使用 NGINX 作为缓存层,最近在对其进行负载测试时,我们偶然发现了一个不寻常的问题:负载测试只会对所有内容进行缓存未命中。

流量是这样的: Client > NLB > NGINX > ELB (stickiness) > Application Layer

经过一些分析和故障排除后,我得出的结论是,这种行为的原因是负载注入器发送的请求中缺少“AWSELB”粘性 cookie。如果未设置 cookie,AWS ELB 将发送带有 AWSELB 值的“set-cookie”,并且还将包含一个缓存控制:no-cache="set-cookie"

由于它有一个“no-cache”指令,NGINX 最终不会创建预期的缓存条目,除非该 cookie 被发送(此后的请求将具有缓存 HIT 行为)。浏览了很多链接/问题和文档,但到目前为止我一直无法找到解决方案。有没有人经历过这个,你是如何处理的?

样品要求:

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

4

0 回答 0