
나는 웹사이트를 가지고 있습니다 (https://mediacru.sh)에는 몇 가지 버전이 있습니다. 일반 데스크톱 사이트, 어두운 테마의 동일한 사이트, 모바일 사이트가 있습니다. 그들은 모두 동일한 URL을 공유합니다. 테마는 쿠키로 선택되며 모바일 버전은 사용자 에이전트를 기반으로 표시됩니다.
표시된 대로 캐싱을 설정했습니다.여기 nginx 구성에서. 초당 500개 이상의 요청을 받을 수 있으며 모든 것이 정상 상태로 유지되도록 많은 트래픽을 백엔드에서 멀리 유지해야 합니다. 나는 1초 또는 30초 캐시로 설정했지만(사이트의 어느 부분이 캐시되는지에 따라) 이는 한 사용자의 페이지를 캐시하고 다른 사용자에게 잘못된 페이지를 제공하는 불행한 부작용이 있습니다.
이러한 다양한 상황을 고유한 것으로 인식하도록 캐싱을 조정하려면 어떻게 해야 합니까? 이전에는 nginx와 백엔드 사이에 Varnish를 설정했지만 이에 대해 특별한 작업을 수행하지 않았습니다. 아마도 우리의 필요에 맞을 수 있을까요?
답변1
다음은 쿠키를 사용한 구현 예입니다. 쿠키 값이 dark
, light
또는 중 하나이면 mobile
캐시된 페이지를 제공하려고 합니다. 다른 쿠키 값(값 없음 포함)의 경우 캐시를 우회하고 업스트림에서 적절한 쿠키를 설정하여 다음 요청에서 캐시를 사용한다고 가정합니다.
proxy_cache_key
캐시 키에 쿠키 값을 추가하고 proxy_cache_bypass
쿠키가 미리 정의된 값 집합에 없으면 캐시를 건너뛰는 데 사용됩니다 .
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;
}
}
매뉴얼: