리눅스

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

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 (리로드)

 

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

Recent Posts

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

4주 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

4주 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

1개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

1개월 ago

윈도우 11 설치 시 Microsoft 계정 로그인 없이 로컬 계정 만들기

언제부턴가 윈도우 11을 처음 설치할 때 마이크로소프트(Microsoft) 계정 로그인을 강제로 요구하게 되었습니다. 물론 마이크로소프트 계정이…

6개월 ago

에어팟 프로 2 케이스 스피커 소리를 완전히 끄는 방법

애플 에어팟 프로 2 (AirPods Pro 2) 케이스에는 스피커가 내장되어 있습니다. 그런데 간혹 아무 것도…

9개월 ago