logo

Nginx 캐시 설정법

Server Side February 11, 2020

Nginx 에서 캐시 설정을 하는 방법에 대한 기록입니다.

캐시 서버를 별도로 두는 방법도 있고 캐싱 방법이야 무궁무진한데, 일반적으로는 클라이언트의 컴퓨터에 다운받게하고 웹 서버에서 정보를 풀링할동안 띄워주는 역할을 하는 그 캐시를 설정하는 방법을 알아보았다.

 

일반적으로 모든 웹 페이지 소스는 클라이언트에 다운되어 랜더링 되는데, 이 과정에서 Cache TTL(생존주기)가 대부분 미정으로 되어있다. 이런 페이지는 브라우저나 환경별로 매번 새 정보를 요청할때가 있거니와 자체적인 TTL 기준으로 사용되어지기도 한다.

보통 그래서 html 메타태그에 Cache-Control 이란 설정으로 페이지별로 캐싱정도를 관리하기도 하지만, 여기서는 Nginx가 모든 리소스 요청에 대해 캐싱 기준을 설정하는 그런 방법에 대해 기술한다.

 

1
2
$ sudo nano /etc/nginx/sites-available/default
 
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
...
 
server {
        ...
 
        # 로컬 설정, 웹페이지, api 요청등은 캐싱하지 않고 매번 새로운 자료로 제공한다.
        location ~* \.(?:manifest|html?|php?|xml|json)$ {
                expires -1;
        }
 
        # 홈페이지를 구성하는 스타일, 스크립트는 1달 정도 캐싱한 후 새로운 정보를 제공한다.
        location ~* \.(?:css|js)$ {
                expires 1M;
                access_log off;
                add_header Cache-Control "public";
        }
 
        # 홈페이지를 구성하는 이미지등의 리소스는 변화가 거의 없으므로 한 번 다운로드하면 3달 정도 캐싱한다.
        location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
                expires 3M;
                access_log off;
                add_header Cache-Control "public";
        }
}
cs

 

캐싱 기준은 서버마다 다르겠지만 본인의 경우에는 -1, 1M, 3M으로 설정했다. 사실 이미지나 영상 같은 이름의 리소스가 바뀌는 경우는 거의 없다시피 하므로 1y같이 년단위로 지정해도 상관이 없을것이다.