我有一个网站( https://mediacru.sh ),有几个版本。 有正常的桌面网站,黑暗的主题相同的网站,和移动网站。 他们都共享相同的url。 主题是用cookieselect的,移动版本是基于用户代理显示的。
我已经在我们的nginxconfiguration中设置了caching。 我们每秒可以获得500个请求,而且我需要保留很多stream量,所以一切都保持健康。 我已经设置了一个1或30秒的caching(取决于网站的哪一部分被caching),但是这具有caching一个用户的页面并将错误的页面提供给其他人的不幸的副作用。
我可以做些什么来调整caching,以识别这些不同的情况是唯一的? 我们之前在nginx和后端之间build立了varnish,但是我们没有做任何特别的事情。 它可能会适合我们的需求吗?
这里是使用cookie的示例实现。 如果cookie重视dark , light或mobile我们尝试提供caching页面。 对于任何其他cookie值(包括没有值),我们绕过caching,并假设上游将设置适当的cookie,所以下一个请求将使用caching。
我们使用proxy_cache_key将cookie值添加到caching键和proxy_cache_bypass以在cookie不在预定义值集中时跳过caching。
map $cookie_theme $cache_bypass { default "1"; "dark" "0"; "light" "0"; "mobile" "0"; } proxy_cache_path /var/tmp/nginx levels=1 keys_zone=test-cache:10m; server { listen 80; server_name test-cache.localhost; location / { proxy_pass http://test-cache; proxy_cache test-cache; proxy_cache_valid 1m; proxy_cache_key "$host$request_uri $cookie_theme"; proxy_cache_bypass $cache_bypass; } }
手册: