리눅스/nginx

캐시

Aif 2023. 9. 12. 18:40

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