1. 캐시 선언
proxy_cache_path /var/nginx/cache # 경로지정 http 블록에서 사용가능
keys_zone=CACHE:60m # 공유 메모리 영역 60MB
levels=1.2 # 디렉토리 구조의 레벨 지정
inactive=3h # 캐시 후 3시간 동안 유지
max_size=20g; # 캐시 영역 크기 20GB로 제한
proxy_cache CACHE; # 어떤 캐시 영역을 사용할지 결정 http, location, server 블록에서 사용가능
2. 캐시 락
동일한 리소스에 대한 요청이 여러 개 들어오면 하나의 요청만 보내서 캐시를 생성함 ( 업스트림을 한번만 하게됨 )
proxy_cache_lock on;
# 생성중인 캐시에 대한 요청이 들어올 시 해당 요청을 대기했다가 캐시가 생성되면 요청을 캐시로 처리함
proxy_cache_lock_age 10s;
# 설정 시간 내에 캐시가 생성이 안되면 대기 중인 요청을 다른 서버로 업스트림 해서 캐시를 생성하게됨
proxy_cache_lock_timeout 3s;
# 설정 시간 내에 캐시가 생성이 안되면 대기 중인 요청을 다른 서버로 업스트림 해서 요청을 처리함 캐시 생성은 안됨
3. 해시 키 값 캐시
proxy_cache_key "$host$request_uri $cookie_user";
# host, request_uri, cookie_user를 해시해서 캐시의 키값으로 사용
4. 캐시 우회
캐시를 사용하지 않고 우회하고 싶을 때
proxy_cache_bypass $http_cache_bypass;
# http의 헤더 값 중 cache_bypass 가 0 (성공)이 아닐경우 캐시를 확인하지 않음
캐시를 우회하는 상황은 여러가지 대표적으로 - 트러블슈팅, 디버깅
5. 캐시 성능
사용자 환경에 캐시해서 nginx까지 도달하지 않고도 콘텐츠를 제공받을 수 있다.
location ~* \. (css:js)${ # CSS와 자바스크립트 파일을 캐시하도록 명시함
expires 1y; # 사용자 환경에 캐시된 콘텐츠가 1년동안 유지 되게함
add_header Cache-Control "public";
# public는 전달되는 모든 서버에 캐시가 가능하고 private은 사용자 환경에만 리소스를 캐시함
}
6. 캐시 분할
용량이 큰 캐시 파일을 작은 조각으로 나눠 저장해서 효율을 높힘
proxy_cache_path /tmp/mycache keys_zone=mycache:10m;
# 캐시 경로, 공유 메모리 용량 선언
server {
...
proxy_cache mycache;
# 사용할 캐시
slice 1m;
# 1MB로 분할
proxy_cache_key $host$uri$is_args$args$slice_range;
# 해시할 변수 ( 키값으로 캐시를 찾아냄 )
proxy_set_header Range $slice_range;
# 헤더를 추가함 .HTTP의 바이트 레인지 요청을 사용가능
porxy_http_version 1.1;
# HTTP 버전 1.1 이상부터 위 헤더를 사용가능
proxy_cache_valid 200 206 1h;
# 200 206 응답에 대해서만 1시간 동안 캐시 유지
location \ {
proxy_pass http://origin:80;
}
}
'리눅스 > nginx' 카테고리의 다른 글
CDN - 컨텐츠 딜리버리 네트워크 (0) | 2023.09.18 |
---|---|
upstream 블럭 / stream 블럭 (0) | 2023.09.12 |
트래픽 관리 (0) | 2023.09.11 |
고성능 부하분산 (0) | 2023.09.07 |
설정 파일과 정적 콘텐츠 서비스 (0) | 2023.09.07 |