본문 바로가기
Server/Nginx

Nginx 캐싱

by doriver 2024. 6. 20.

여러 캐시들

웹 브라우저와 애플리케이션 서버 사이에는 

클라이언트의 브라우저 캐시, 중간 캐시, CDN(Content Delivery Networks), 애플리케이션 서버 앞에 있는 로드 밸런서 또는 리버스 프록시와 같은 잠재적으로 여러 캐시가 있습니다. 

 

Nginx에 포함된 '콘텐츠 캐시' 기능

$upstream_cache_status( 캐시 상태를 나타냄,  log_format에서 사용 )

HIT: 캐시된 응답을 사용
MISS: 캐시되지 않은 응답
EXPIRED: 캐시된 응답이 만료되어 새로 가져옴
BYPASS: 캐시를 우회함

 

 

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g 

                                  inactive=60m use_temp_path=off;
server {
     ~
    location / {
        
        proxy_pass http://localhost:8080;

        proxy_cache my_cache;
        proxy_cache_valid 200 302 10m; # 200과 302 응답 코드에 대해 10분 동안 캐시를 유지
        proxy_cache_valid 404 1m; #  404 응답 코드에 대해 1분 동안 유지
    }
}

proxy_cache_path

캐시의 로컬 디스크 디렉토리

/path/to/cache/

 

캐시 디렉토리 아래 계층구조 설정

levels=1:2 ( /path/to/cache/ 아래에 2단계 디렉터리 계층 구조를 설정 )

캐시 영역( 캐시된 키를 저장하는 데 사용됨  )을 정의

keys_zone=my_cache:10m
my_cache라는 이름의 캐시 영역이 생성되고, 할당된 메모리 크기는 10m 

 

캐시 크기의 상한을 설정

max_size=10g

캐시 크기가 제한에 도달하면, 캐시 관리자라는 프로세스가 캐시 크기를 제한 아래로 되돌리기 위해 파일을 제거

 

항목이 액세스되지 않고, 캐시에 남아 있을 수 있는 기간을 지정

inactive=60m

해당 기간동안 요청되지 않은 파일은 만료 여부에 관계없이 캐시 관리자 프로세스에 의해 캐시에서 자동으로 삭제됨 

 

임시 저장 디렉토리 사용x

use_temp_path=off

NGINX는 먼저 캐시로 향하는 파일을 임시 저장 영역에 기록하는데, 이를 캐시디렉토리에 하도록 지시

( 파일 시스템 간에 불필요한 데이터 복사를 방지 )

 

Nginx 캐싱 과정

Nginx는 먼저 캐시 디렉토리에 
해당 요청에 대한 응답이 이미 저장되어 있는지 확인합니다. 
캐시 키는 일반적으로 요청 URL을 기반으로 생성

 

만약 요청된 데이터가 캐시에 존재하고, 그 데이터가 유효한 상태라면
(예: 캐시 만료 시간이 지나지 않았거나, HTTP 헤더의 조건이 충족됨)
, NGINX는 원 서버에 요청을 보내지 않고 캐시에서 데이터를 읽어 클라이언트에 응답

 

요청된 데이터가 캐시에 없거나 캐시가 만료된 경우
, NGINX는 원 서버(백엔드 서버)로 요청을 전달합니다.

 

원 서버로부터 응답을 받으면, NGINX는 이 응답을 클라이언트에 전달하기 전에 캐시에 저장합니다. 
캐싱 정책(예: 캐시 만료 시간 등)에 따라 응답이 캐시 디렉토리에 저장됩니다.

 

최종적으로 NGINX는 클라이언트에게 응답을 전달합니다. 
다음 요청이 동일한 리소스를 요구하면, 저장된 캐시에서 빠르게 응답할 수 있습니다.

 

어떤 데이터들이 캐싱되는가?

HTTP메시지 전체? , HTTP 응답의 헤더와 바디?

 

'Server > Nginx' 카테고리의 다른 글

Nginx 명령어01( 윈도우에서 )  (0) 2024.07.13
nginx.conf에서 몇가지 용어들  (0) 2024.06.20
Nginx 윈도우에 설치  (0) 2024.06.18
Nginx ? what, why, how  (0) 2024.06.18
Nginx  (0) 2024.05.26