반응형
nginx 를 proxy로 설정할 때 아래는 nginx에서 캐시를 설정하는 예제입니다.
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_zone:10m inactive=60m;
server {
listen 80;
server_name my;
location / {
proxy_cache my_zone; # 위에서 지정한 keys_zone 이름을 지정합니다.
proxy_cache_key $host$uri$is_args$args; # cache key설정
proxy_pass http://org; # 요청을 전달할 백엔드 서버의 주소를 지정합니다.
}
}
}
- proxy_cache_path는 캐시 파일이 저장될 디렉토리 경로를 지정합니다. 이 설정에서는 /var/cache/nginx 디렉토리를 사용하도록 지정되어 있습니다.
- levels=1:2는 캐시 파일의 하위 디렉토리를 생성하는 데 사용되는 수준 수를 지정합니다. 이 설정에서는 1단계의 하위 디렉토리를 생성하고 그 하위 디렉토리에 2단계의 하위 디렉토리를 생성하도록 지정되어 있습니다.
- keys_zone=my_zone:10m은 캐시 키를 저장하는 데 사용되는 공간을 지정합니다. 이 설정에서는 my_zone라는 이름의 공간을 10MB 크기로 생성하도록 지정되어 있습니다.
- inactive=60m은 캐시 파일이 유효하지 않은 것으로 간주되기 전에 얼마나 오래 저장될 수 있는지를 지정합니다. 이 설정에서는 60분 동안 캐시 파일이 유효하도록 지정되어 있습니다.
proxy_cache_key 지시어는 캐싱 용도로 키를 정의하는 데 사용됩니다. 이 경우 키는 다음 변수로 구성됩니다:
- $host: 요청에서의 호스트 이름
- $uri: 요청에서의 URI
- $is_args: 요청에 쿼리 인자가 있는 경우 빈 문자열 또는 "?"
- $args: 요청에서의 쿼리 문자열
이제 해당 서비스도메인으로 curl을 날려보면
# curl my/1.jpg -I
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Wed, 14 Jun 2023 07:04:33 GMT
Content-Type: image/jpeg
Content-Length: 82693
Connection: keep-alive
Last-Modified: Fri, 29 Mar 2019 07:19:47 GMT
ETag: "2d-14305-585367ee1aac0"
Cache-Control: max-age=31536000
Accept-Ranges: bytes
cache파일의 저장위치는 /var/cache/nginx에서 아래와 같이 cache파일이 저정되어 있음을 확인할 수 있다.
# ls -alR /var/cache/nginx/
/var/cache/nginx/:
total 0
drwxr-xr-x. 9 nginx root 116 Jun 14 16:22 .
drwxr-xr-x. 8 root root 81 Apr 29 12:48 ..
drwx------. 3 nginx nginx 16 Jun 14 16:22 6
/var/cache/nginx/6:
total 0
drwx------. 3 nginx nginx 16 Jun 14 16:22 .
drwxr-xr-x. 9 nginx root 116 Jun 14 16:22 ..
drwx------. 2 nginx nginx 46 Jun 14 16:22 d3
/var/cache/nginx/6/d3:
total 84
drwx------. 2 nginx nginx 46 Jun 14 16:22 .
drwx------. 3 nginx nginx 16 Jun 14 16:22 ..
-rw-------. 1 nginx nginx 83333 Jun 14 16:22 399dc83e97062c14f36ee6bbb2187d36
해당 파일을 읽어보면 첫줄은 cache medata데이타이 바이너리값으로 저장되어 있고, 둘째 라인부터 cache key가 $host$uri$is_args$args 로 my/1.jpg가 key값으로 저장된 것을 확인할 수 있다.
# head /var/cache/nginx/6/d3/399dc83e97062c14f36ee6bbb2187d36
▒jfǝ\▒j▒d▒▒▒▒_▒"2d-14305-585367ee1aac0"
KEY: my/1.jpg
HTTP/1.1 200 OK
Date: Wed, 14 Jun 2023 06:57:41 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Fri, 29 Mar 2019 07:19:47 GMT
ETag: "2d-14305-585367ee1aac0"
Accept-Ranges: bytes
Content-Length: 82693
Cache-Control: max-age=31536000
캐쉬파일의 이름은 cache key에 md5를 적용한 결과로 파일이름 앞 디렉토리는 level 설정 수준에 따라 지정되어 cache key만 알면 해당파일이 어떻게 저장될지를 알 수 있고 이를 바탕으로 nginx는 cache file을 찾아간다.
# echo -n my/1.jpg | md5sum
399dc83e97062c14f36ee6bbb2187d36 -
여기시 level값 1:2로 설정해서 md5마지막값 1자리값인 6이 첫번째 level이고,
그 앞 2자리 d3이 두번째 level값으로 저장되는 디렉토리는 다음과 같음
/var/cache/nginx/6/d3/399dc83e97062c14f36ee6bbb2187d36
'nginx' 카테고리의 다른 글
nginx upstream module - part1 (load balancing) (0) | 2023.06.15 |
---|---|
nginx cache status 확인 (0) | 2023.06.15 |
nginx cache-control 및 priority (0) | 2023.06.14 |
cli로 nginx cache file 찾기, 삭제 및 TTL변경 (0) | 2023.06.14 |
nginx (web server, proxy, api gateway...) (0) | 2023.06.11 |