본문 바로가기
서버인프라/엔진엑스

[ 제5강 캐싱 ] NGINX 콘텐츠 캐싱

by techwold ted 2021. 1. 22.

응답 캐싱 활성화

캐싱을 사용하려면 proxy_cache_path 최상위 컨텍스트에 지시문을 포함하십시오. 필수 첫 번째 매개변수는 캐시 된 콘텐츠의 로컬 파일 시스템 경로이고 필수 매개변수는 캐시 된 상목에 대한 메타 데이터를 저장하는 사용되는 공유 메모리 영역의 이름과 크기를 정의 합니다.

http {
    ...
    proxy_cache_path /data/nginx/cache keys_zone=one:10m;
}

그런다음 proxy_cache 서버 응답을 캐시 할 컨텍스트에 지시문 keys_zone 을 포함하고 proxy_cache_path 지시문에 대한 매개 변수로 정의 된 영역 이름을 지정합니다.

http {
    ...
    proxy_cache_path /data/nginx/cache keys_zone=one:10m;
    server {
        proxy_cache mycache;
        location / {
            proxy_pass http://localhost:8000;
        }
    }
}

keys_zone 매개 변수로 정의 된 크기는 캐시된 응답 데이터의 총량을 제한하지 않습니다. 캐시 된 응답 자체는 파일 시스템의 특정 파일에 메타 데이터 사본과 함께 저장 됩니다. 캐시 된 응답 데이터의 양을 제한 하려면 지시문에 max_size 매개 변수를 포함 하십시오 proxy_cache_path. (그러나 다음 섹션에 설명 된대로 캐시 된 데이터의 양이 일시적으로 제한을 초과 할 수 있습니다.)

 

캐싱과 관련된 NGINX 프로세스

캐시관리자는 캐시의 상태를 확인하기 위해 주기적으로 활성화 합니다. 캐시크기가 max_size 매개 변수가 proxy_cache_path 지시문에 설정한 한계를 초과하면 캐시 관리자는 가장 최근에 액세스 한 데이터를 제거합니다. 앞서 언급했듯이 캐시된 데이터의 양은 캐시 관리자 활성화 사이의 시간 동안 일시적으로 제한을 초과 할 수 있습니다.

캐시로더는 바로 NGINX에 시작 후 한번만 실행 됩니다. 이전 캐시된 데이터에 대한 메타 데이터를 공유 메모리 영역으로 로드 합니다. 전체 캐시를 한번에 로드하면 시작 후 처음 몇 분 동안 NGINX성능을 저하시키는데 충분한 리소스가 소비 될 수 있습니다. 이를 방지 하려면 proxy_cache_path 지시문에 다음 매개 변수를 포함하여 캐시의 반복로드를 구성하십시오

 

  • loader_threshold – 반복 기간 (밀리 초) (기본값  200)
  • loader_files – 한 번의 반복 동안로드되는 최대 항목 수 (기본적으로  100)
  • loader_sleeps – 밀리 초 단위의 반복 간격 (기본값  50)
proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;

 

캐시 할 요청 지정

키 계산에 사용되는 요청 특성을 변경하려면 다음 proxy_cache_key 지시문을 포함 하십시오

proxy_cache_key "$host$request_uri$cookie_user";

응답이 캐시되기 전에 동일한 키를 사용하여 요청을 만들어야하는 최소 횟수를 정의하려면 다음 proxy_cache_min_uses지시문을 포함합니다 .

proxy_cache_min_uses  5 ;

GET 이외의 메서드를 사용하여 요청에 대한 응답을 캐시하려면 지시문 HEAD과 함께 GET HEAD매개 변수로 나열합니다 proxy_cache_methods.

proxy_cache_methods GET HEAD POST;


캐싱 제한 또는 비활성화

기본적으로 응담은 캐시에 무기한 남아 있습니다.

캐시가 구성된 최대 크기를 초과 한 경우 마지막으로 요청 된 이후 시간 순서대로 제거 됩니다. 유효한 것으로 간주되는 기간을 캐시 된 응답을 설정 할 수 있습니다. 

특정 상태코드가 있는 캐시된 응답이 유효한 것으로 간주되는 기간을 제한 하려면 proxy_chche_valid 지시문을 포함하십시오

proxy_cache_valid 200 302 10m;
proxy_cache_valid 404      1m;

 

이 예에서 200또는 302코드 404가 포함 된 응답은 10 분 동안 유효한 것으로 간주되고 코드 가 포함 된 응답 은 1 분 동안 유효합니다. 모든 상태 코드가있는 응답의 유효 시간을 정의하려면 any첫 번째 매개 변수로 지정 하십시오.

proxy_cache_valid any 5m;

 

캐시에서 콘텐츠 제거

NGINX를 사용하면 캐시에서 오래된 캐시 파일을 제거 할 수 있습니다. 이는 웹 페이지의 이전 버전과 새 버전을 동시에 제공하지 못하도록 오래된 캐시 된 콘텐츠를 제거하는 데 필요합니다. 사용자 지정 HTTP 헤더 또는 HTTP PURGE메서드 가 포함 된 특수 "제거"요청을 수신하면 캐시가 제거됩니다 .

 

캐시 제거 구성

HTTP PURGE 메서드를 사용하는 요청을 식별하고 일치하는 URL을 삭제하는 구성을 설정하겠습니다.

 

1. http 블록내에 생성

http {
    ...
    map $request_method $purge_method {
        PURGE 1;
        default 0;
    }
}

 

2. 캐싱이 구성된 위치 {} 블록에 proxy_cache_purge 지시문을 포함하여 캐시 제거 요청에 대한 조건을 지정합니다. 이 예에서는 이전 단계에서 구성된 $ purge_method입니다.

server {
    listen      80;
    server_name www.example.com;

    location / {
        proxy_pass  https://localhost:8002;
        proxy_cache mycache;

        proxy_cache_purge $purge_method;
    }
}

 

PURGE 명령 실행

proxy_cache_purge지침이 구성되어, 당신은 캐시를 제거하는 특별한 캐시 퍼지 요청을 보내야합니다. curl다음 예와 같은 명령을 포함하여 다양한 도구를 사용하여 제거 요청을 실행할 수 있습니다 .

 

curl -X PURGE -D – "https://www.example.com/*"

HTTP/1.1 204 No Content
Server: nginx/1.15.0
Date: Sat, 19 May 2018 16:33:04 GMT
Connection: keep-alive

댓글