코딩마을방범대

Nginx를 이용한 캐시 설정 본문

💡 백엔드/우분투

Nginx를 이용한 캐시 설정

신짱구 5세 2023. 11. 2. 16:29

 

 

 

 

우분투에서 Nginx 구축

웹서버 Nginx & Apache (이전 포스트) 1. Nginx 설치 apt 업데이트 후 Nginx 설치 Nginx 설치 시 자동으로 실행됨 $ sudo apt update $ sudo apt-get install nginx Nginx 실행 $ sudo service nginx start # or $ sudo systemctl start nginx

sweet-rain-kim.tistory.com

 

위 포스트를 통해 nginx를 구축하였다면, 캐시 설정을 통해 서비스를 향상 시킬 수 있다.

 

 

 

 


 

 

 

 

 

 

Proxy Cache

 

Nginx 웹 서버에서 사용되는 모듈 중 하나로, 원격 서버로부터 받은 응답을 캐시하여 이후의 클라이언트 요청에 대한 성능 및 응답 시간을 개선하는 역할을 한다.

대규모 웹 애플리케이션 및 웹 사이트에서 많은 트래픽을 처리하고 응답 시간을 최적화하는 데 유용하다.

 

하지만, 유동적인 response를 뱉는 API를 사용 중이라면 proxy_cache 사용이 적절하지 않을 수 있다.

 

 

 

 

 


 

 

 

 

 

 

사용 방법

 

 

1. nginx.cof 파일에 proxy_cache_path 정의

 

$ sudo vi /etc/nginx/nginx.conf
http {
      proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
      ...
}
옵션 설명
/path/to/cache 캐시파일을 저장할 경로를 설정한다.
levels=1:2 위에서 설정한 저장 경로 아래에 2단계 디렉터리 계층 구조를 설정한다.
단일 디렉터리에 많은 수의 파일이 있으면 파일 액세스 속도가 느려질 수 있으므로 대부분의 배포에 2단계 디렉터리 계층 구조를 사용하는 것이 좋다.
keys_zone=my_cache:10m 캐시 키 및 사용 타이머와 같은 메타데이터를 저장하기 위한 공유 메모리 영역을 설정한다.
NGINX에서 디스크로 이동할 필요 없이 요청이 HIT인지 MISS인지 빠르게 결정할 수 있어 검사 속도가 크게 빨라진다.
1MB 영역은 약 8,000개의 키에 대한 데이터를 저장할 수 있으므로 예제에서 구성된 10MB 영역은 약 80,000개의 키에 대한 데이터를 저장할 수 있다.
max_size=1g (선택사항) 캐시 크기가 제한에 도달하면 캐시 관리자라는 프로세스가 캐시 크기를 제한 아래로 되돌리기 위해 가장 최근에 사용된 파일을 제거한다.
값을 지정하지 않으면 캐시가 사용 가능한 모든 디스크 공간을 사용하도록 확장된다.
inactive=60m 항목이 액세스되지 않고 캐시에 남아 있을 수 있는 기간을 지정한다. 기본값은 10분(10m)

use_temp_path=off nginx 1.7.1 이상부터 해당되는 옵션이라고 한다.
파일 시스템 간에 불필요한 데이터 복사를 방지하려면 이 매개변수를 off로 설정하는 것이 좋다.

 

 

 


 

 

 

2. proxy_cache 사용

 

proxy_pass를 정의해둔 파일을 연다!

(나의 경우 /etc/nginx/sites-available/ 폴더에 정의되어 있다.)

server {
      location / {
            proxy_cache my_cache;
            proxy_pass http://backend;
            proxy_cache_lock_timeout 5s;
            proxy_cache_methods GET HEAD POST;
            proxy_cache_valid 200 401 301 304 5s;
            add_header X-Cache-Status $upstream_cache_status;
      }
}
옵션 설명
proxy_cache_lock_timeout 여러 클라이언트가 캐시에 최신이아닌 파일을 요청하는 경우,
첫번째 요청만 Origin 서버를 통해 통과할 수 있고 나머지는 대기 후(5초) 캐시에서 파일을 가져온다.
proxy_cache_methods 클라이언트 요청 메서드 목록을 지정해준다.
“GET” 과 “HEAD” 메서드는 default로 지정되어있지만 명시적으로 지정해 주는 것이 좋다.
proxy_cache_valid 응답 코드에 대해 캐싱 시간을 설정해준다.
(응답코드 대신 any를 작성할 경우 모든 응답 코드에 대한 캐싱시간을 설정해준다.)
add_header 사용자 정의 헤더를 추가한다.
X-Cache-Status는 캐시 상태를 표시한다.

 

 

 


 

 

 

 

X-Cache-Status의 값 정의

 

HIT 응답이 캐시에서 제공되었습니다.
MISS 응답이 처음으로 캐시되었습니다.
BYPASS 캐시가 통과되었고, 응답이 직접 백엔드 서버에서 가져온 것입니다.
EXPIRED 캐시된 응답이 만료되었고, 새로운 응답이 백엔드 서버에서 가져와 캐시되었습니다.
STALE 만료된 캐시된 응답이 제공되었습니다.
UPDATING 다른 요청이 이미 캐시 업데이트를 시작했으며, 현재 요청은 캐시된 응답을 받았습니다.
REVALIDATED 캐시된 응답이 백엔드 서버에서 재검증되었습니다.

 

 

 

 


 

 

 

3. nginx 재구동

 

nginx -t 를 이용해 문법오류를 체크한 후 restart를 통해 재구동 시켜준다.

$ sudo nginx -t
$ sudo service nginx restart

 

 

 

이후 실행해보면 동일한 API를 동일한 Request로 호출했을 때

아래와 같이 X-Cache-Status가 HIT으로 표시되는 것을 볼 수 있다.

 

 

 

 

 


참고사이트

Nginx를 이용한 Reverse Proxy 및 캐시 설정

NGINX Cache 시스템 이해하기

 

 

SMALL