코딩마을방범대
Nginx를 이용한 캐시 설정 본문
728x90
위 포스트를 통해 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 및 캐시 설정
728x90
'💡 백엔드 > 우분투' 카테고리의 다른 글
[우분투] 현재 CPU, 메모리 사용량 모니터링 하는 방법 (1) | 2023.11.03 |
---|---|
Nginx의 현재 연결 수, 처리된 요청 수 정보를 확인하는 방법 (0) | 2023.11.02 |
우분투의 CURL (0) | 2023.09.27 |
우분투에 OpenLDAP & phpLdapAdmin 구축하기 (0) | 2023.09.12 |
우분투에 FreeRadius 구축하기 (1) | 2023.09.11 |