[Nginx] 설정 Cache 기능 정리.

  1. [Nginx] cache 사용법
  2. [Nginx] cache control
  3. [Nginx] cache - url 에서 특정 parameter 제거하여 캐싱하는 방법.

[Nginx] cache 사용법

  • 빠른 예제
proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60s use_temp_path=off;

upstream myupstream {
    server 127.0.0.1:8080 max_conns=50;
}

server {

    listen 8000;
    
    #remove GET parameters - sessionid
    if ($args~(.*) sessionid = [^&]*(.*)) {
        set $args $1$2;
    }
    #remove GET parameters - adid
    if ($args~(.*) adid = [^&]*(.*)) {
        set $args $1$2;
    }

    location / {
        proxy_cache my_cache;
        proxy_cache_methods GET HEAD POST;
        proxy_cache_key "$scheme$request_method$host$uri$is_args$args";
        proxy_cache_bypass $cookie_nocache $arg_nocache $http_pragma;
        #proxy_cache_lock on;
        #proxy_cache_valid 200 302 10m;
        #proxy_cache_valid 404 1m;
        #add_header X-Cache-Status $upstream_cache_status;

        ...

        proxy_pass http: //myupstream;
    }

}
  • /path/to/cache ==> 캐시 내용이 local disk 에 저장될 위치
  • levels=1:2 ==> directory depth 와 사용할 name 길이.
    • ex ) /data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
  • keys_zone ==> 캐시 키로 사용될 이름과 크기. 1MB 는 약 8천개의 이름 저장. 10MB면 8만개.
  • max_size ==> 캐시 파일 크기의 maximum. size 가 over 되면 가장 오래전에 사용한 데이터 부터 삭제한다.
  • inactive ==> access 되지 않았을 경우 얼마 뒤에 삭제 할 것인가.
  • use_temp_path ==> 설정된 path 외에 임시 저장 폴더를 따로 사용할 것인가? 따로 설정하지 않는 것이 좋다.
  • proxy_cache my_cache ==> 캐시로 사용할 메모리 zone 이름.
  • proxy_cache_methods ==> request method를 정의한다. default : GET, HEAD
  • proxy_cache_key ==> 캐시 할 때 사용할 이름.
  • proxy_cache_bypass ==> 예를 들어 "http://www.example.com/?nocache=true" 이러한 요청이 왔을 때 캐싱되지 않은 response 를 보낸다. 이 설정이 없다면 nocache 아규먼트는 동작하지 않는다. http_pragma==> 헤더 Pragma:no-cache
  • proxy_cache_lock ==> 활성화 시키면 한 번에 단 하나의 요청만 proxy server로 전달되어 proxy_cache_key 에 따라 캐싱된 데이터로 사용합니다. 다른 request 들은 캐싱된 데이터를 사용하거나 proxy_cache_lock_timeout의 설정에 따라 proxy server로 전달 될 수 있습니다.
  • proxy_cache_valid ==> 기본적으로 캐싱할 response code 와 시간을 정의한다.
  • add_header X-Cache-Status $upstream_cache_status ==> 캐싱 상태 리턴. MISS:없음, HIT:캐시 사용, EXPIRED

[Nginx] cache control

  • 두 가지 캐싱 옵션이 있다.
    • proxy_cache_valid 200 302 10m; ==> 기본적으로 캐싱할 response code를 정의한다.
    • response 헤더에 Cache-Control:max-age=120 라고 설정하면 120초 뒤에 삭제한다. proxy_cache_valid 보다 우선 순위가 높다.

[Nginx] cache - url 에서 특정 parameter 제거하여 캐싱하는 방법.

  • $args 에 있는 parameters 를 정규식으로 제거하여 proxy_cache_key 에서 사용한다.
server{
  ...
  set $c_uri $args;
  
  # remove GET parameters - sessionid
  if ($c_uri ~ (.*)sessionid=[^&]*(.*)) {
     set $c_uri $1$2;
  }

  if ($c_uri ~ (.*)adid=[^&]*(.*)) {
     set $c_uri $1$2;
  }

  location / {
    ...
    proxy_cache_key "$scheme$request_method$host$uri$is_args$c_uri";
    ...
  }



+ Recent posts