nginx proxy_cache_path 지시문 이해


30

이 nginx 구성 파일이 있다고 가정하십시오.

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=myCache:8m max_size=100m inactive=1h;
  • 무슨 keys_zone=myCache:8m뜻입니까? 문서에는 그다지 언급되지 않았습니다.

또한 모든 활성 키와 데이터에 대한 정보는 공유 메모리 영역에 저장되며 이름과 크기는 keys_zone 매개 변수로 구성됩니다.

  • 에서 proxy_cache_valid( 12h)이 지정된 inactive값 ( 1h) 보다 높으면 proxy_cache_path어떻게됩니까? 어떤 규칙을 따를까요? 예 :

    proxy_cache_valid 200 302 12h;
    proxy_cache_valid 404 302 1h;
    

감사!

답변:


39

keys_zone = myCache : 8m은 무슨 뜻인가요?

마찬가지로 문서 상기 , nginx를 유지할는 데이터가 저장되는 모든 활성에 대해 키 정보를 그 공유 메모리 영역으로 name하고 sizekeys_zone 파라미터에 의해 구성된다. 완전성의 문제로 파트 당 분류하자

  • /var/cache/nginx실제 캐시가 저장된 장소입니다. 폴더 내에서 캐시 파일은 이진 파일이지만 그 안에 html 태그를 쉽게 찾을 수 있습니다.
  • levels=1:2 is levels 매개 변수는 캐시의 서브 디렉토리 레벨 수를 설정합니다.
  • keys_zone=myCache:8m최대 크기가 8MB 인 myCache라는 공유 메모리 영역을 정의하고있었습니다. 캐시의 모든 활성 키와 메타 데이터 를 보유 합니다. 따라서 nginx가 페이지가 캐시되었는지 확인하면 항상 공유 메모리 영역을 확인한 다음 /var/cache/nginx캐시가 존재하는 경우 실제 캐시의 위치를 ​​찾습니다 .
  • max_size에 캐시 예를 들어, 파일 사이즈의 최대 크기였다 /var/cache/nginx.
  • inactive=1h캐시를 저장할 수있는 최대 비활성 시간을 지정하십시오. inactive매개 변수로 지정된 시간 동안 액세스되지 않은 캐시 된 데이터는 최신 상태에 관계없이 캐시에서 제거됩니다.

캐시 유효성 검사 및 삭제 작동 방식

nginx 메일 링리스트 에서 가져옴

  • 지시어 proxy_cache_valid 는 응답이 유효한 것으로 간주되는 기간을 지정하며 백엔드 요청없이 반환됩니다. 이 시간이 지나면 응답은 "stale"로 간주되며 반환되지 않거나 proxy_cache_use_stale 설정 에 따라 달라집니다 .

  • 인수 비활성proxy_cache_path의 지정은 얼마나 응답 마지막 사용 후 캐시에 저장됩니다. 요청이 있으면 최근에 부실한 응답도 사용 된 것으로 간주됩니다.

내가 이해하는 것처럼, 여기 nginx가 작동하는 의사 코드

요청이 오면

if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
    use it
else:
    retrieve from backend
    replace the old ones

다른 프로세스에서 캐시 관리자는이 논리를 수행합니다.

if (now() - cache.last_used) > inactive:
    del cache

if all-cache.size > max-size:
    del *the most inactive cache* until size < max-size

proxy_cache_valid (12h)가 proxy_cache_path에 지정된 비활성 값 (1h)보다 높으면 어떻게됩니까?

요청이 특정 캐시에 액세스 한 경우 해당 캐시 개체는 개체가 캐시에 저장된 후 12 시간이 지나야 계속 유효합니다. 그 후, 캐시는 유효하지 않은 것으로 간주되어 nginx는 백엔드에서 가져오고 유효한 타이머를 재설정합니다. 그러나 객체가 12 시간의 유효한 캐시 기간에도 1 시간 이상 비활성 (액세스 할 수없는) 상태 인 경우 nginx는 매개 변수로 인해 객체를 삭제합니다inactive .


"그 후 캐시는 유효하지 않은 것으로 간주되어 nginx는 백엔드에서 가져와 유효한 타이머를 재설정합니다." - 그 흥미 롭군요. 따라서 nginx는 사용자가 요청을 가져 오지 않아도 요청을 가져 옵니까? 예를 들어, 비활성 상태 365d이고 유효 1d하면 nginx는 아무도 요청을하지 않더라도 매일 1 년 동안 캐시에서 요청을 가져 옵니까?
Martin Thoma

1
좋은 대답이지만 이러한 매개 변수 중 일부와 함께 사용하는 측정 단위에 대한 문서를 찾을 수 없습니다. 예를 들어 inactiveparams는 시간 값을 사용하지만 h(약 1 개월 또는 1 일 등) 이외의 값을 사용할 수 없습니다 . 그리고 무엇을 지정해야 max_size합니까? 바이트? 1M에 1M을 사용할 수 있습니까?
Sunil D.

4
@SunilD. -여기 있습니다 : nginx.org/en/docs/syntax.html
adamczi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.