You dont have javascript enabled! Please download Google Chrome!
INIDOG
programming

Nginx 캐시 설정 및 만료 기간 지정하기

programming

Nginx 캐시 설정 및 캐시 만료일 기간 설정


서버의 과다 트래픽 발생 방지를 위해 이미지나 웹 콘텐츠에 대해서 서버단에서의 캐시 컨트롤을 활성화하는 것이 좋습니다.

Nginxapache와는 다르게 .htaccess 파일보다는 주로 nginx.conf 파일과 같은 서버 config 파일에서 액세스 설정을 하게 됩니다.
(서버에 따라 nginx.conf 라는 파일이 다른 이름으로 사용될 수 있음)

물론 브라우저의 캐시와 관련된 설정 또한 nginx.conf 파일에서 바로 지정할 수 있습니다. 이는 .htaccess에서의 캐시 설정법과 비슷하면서도 다릅니다.

 

여기서는 일반적인 정적 파일 캐시 설정만 작성하였습니다. 자세한 문서는 아래 링크를 참조해주세요.
https://www.nginx.com/blog/nginx-caching-guide/

 

아래 nginx.conf 예시를 살펴보겠습니다.

 

# Enable Cache Control
location ~* \.(?:jpg|jpeg|png|gif|ico|gz|svg|svgz|ogg|mp4|webm|ogv|htc|cur)$ {
    expires 3M;
    access_log off;
    add_header Cache-Control "public";
}   
location ~* \.(?:css|js)$ {
    expires 1M; 
    access_log off;
    add_header Cache-Control "public";
}   
location = /favicon.ico {
    expires max;
    access_log off;
    log_not_found off;
}

먼저 위 구문은 location 블록을 사용하므로, server 블록 내에 들어가야 합니다. 원하는 URL 또는 확장자 경로를 지정하여 어떤 확장자의 파일에 대해 캐시를 지정할 것인지를 나타낼 수 있습니다. 대개 그림이나 음악, 영상 파일 또는 css, js 파일은 컨텐츠가 자주 변하는 일이 없으므로 1~4개월 이상의 캐시 만료일을 지정합니다. 여기에서 html, php 확장자를 가진 웹 페이지를 구성하는 파일들은 페이지가 지속적으로 변하기 때문에 따로 작성하지 않는 것을 권장합니다.

expires를 사용하여 캐시가 만료되는 일자를 설정할 수 있습니다.
예를들어 2개월 동안 캐시를 유지하고자 할 경우 ‘2M’을, 1년동안 유지하고자 할 떄는 ‘1y’와 같이 설정합니다. (d=일/M=월/y=년)

expires는 일/월/년 단위이지만 이 대신에 add_header Cache-Control “public”, max-age=[초];를 사용하면 초 단위로도 표현하실 수 있습니다. 예를 들어 캐시 만료일을 30일로 설정하고 싶다면 아래와 같이 2592000(60*60*24*30 초)로 설정해주시면 됩니다.

add_header Cache-Control "public", max-age=2592000;

access_log는 해당 파일을 읽어들일 때 로그를 남기는가에 대한 여부입니다. 위 컨텐츠에 대해서는 대부분 로그를 남길 필요성이 크지 않으므로 off로 설정하였습니다. 마찬가지로 log_not_found는 해당 파일이 없을 경우에 로그를 남길지에 대한 여부입니다. off인 경우 로그를 남기지 않습니다.

 

이렇게 기본적으로 브라우저 캐시 만료에 대한 설정을 할 수 있습니다.

해당 내용의 편집이 완료되었다면 nginx 서비스를 재기동해주어 적용을 완료합니다.

서버 종류에 따라 아래 명령어 중 하나로 nginx 서비스를 재기동할 수 있습니다.
$ sudo systemctl restart nginx (재시작)
$ sudo systemctl reload nginx (리로드)
또는
$ sudo service nginx reload (재시작)
$ sudo service nginx restart (리로드)

 

이 글에 대해 어떻게 생각하시나요?
유용한 포스트였나요? 여러분의 의견을 하단의 Vote와 댓글로 남겨주세요 🙂
유용합니다!
아쉽습니다.

여러분의 의견을 댓글로 남겨주세요.

avatar
error: 경고: 콘텐츠가 보호되고 있습니다. 복사 및 무단 사용을 금지합니다.