NGINX 프록시 캐싱 - 쿼리 문자열의 캐시 버스터 변수 - 무시할 수 있습니까?

NGINX 프록시 캐싱 - 쿼리 문자열의 캐시 버스터 변수 - 무시할 수 있습니까?

캐시를 프록시하려는 다음 URL이 있습니다.

file.php?parameter=one&paramater2=two&r=EPOCHTIMESTAMP

쿼리 문자열 매개변수 "매개변수"는 요청마다 다릅니다. "paramater2"도 마찬가지입니다.

쿼리 문자열 매개변수 r은 클라이언트가 캐시된(클라이언트 측에서) 콘텐츠를 제공하지 않는지 확인하는 데 사용하는 타임스탬프입니다. 일명 "캐시 버스터". 예, 또한 캐시하지 않는 적절한 헤더도 모두 사용합니다.

이제 우리는 이러한 요청 중 일부를 nginx를 통해 캐시를 프록시하고 싶습니다. 항목에 대한 캐시 키를 설정할 때 r 쿼리 문자열 매개변수를 무시하고 다른 모든 매개변수를 사용하도록 nginx에 지시할 수 있습니까? 매개변수 r을 무시할 수 없다면 nginx 프록시 캐시는 각 캐시 키가 고유하므로 쓸모가 없게 됩니다.

감사해요.

답변1

우리는 이 질문에 대한 해결책을 찾았습니다.

이를 수행하는 올바른 방법은 nginx $arg_...변수를 사용하여 캐시 키를 구성하는 것입니다. $arg_...쿼리 문자열 매개변수가 포함됩니다. 따라서 위의 예에서는 캐시 키 내에서 $arg_parameter및 를 사용합니다 .$arg_parameter2

결과는 다음과 nginx.conf같습니다.

http {
  ...
    server {
      location / {
         ...
         proxy_cache_key $scheme$proxy_host$uri$is_args$arg_parameter$arg_parameter2;
      }
    }
  ...
}

매개변수 와 같이 하이픈(대시)이 포함된 쿼리 문자열 매개변수는 구문 data-*에서 작동하지 않습니다 $arg_paramName. Lua를 사용한 해결 방법은 다음에서 찾을 수 있습니다.이 게시물.

관련 정보