개발

nginx 캐싱 설정 (Cache-Control)

앞전의 이야기랑 연계되는 이야기이긴한데,
S3서버를 통해서 제공되는 파일은 그쪽에서 캐싱처리를 해도되지만, 웹서버에 올려서 호스팅되는 파일은 웹서버쪽에서 캐싱처리를 해야한다.

더군다나 나는 Docker 환경에 Proxy 방식으로 웹서버를 운용중이라 적용하는데 좀 버거운 과정이 있었다.

쉽게 상황을 풀어보면 도커에서 여러 서버 컨테이너를 운용하기위해서 나는 외부 접속을 8000포트의 프록시 서버가 관리하고 이 프록시 서버에서 요청된 도메인에 해당하는 서버 스트림으로 연결을 넘겨주게된다.

여기서 해당 서버에 호스팅된 파일의 캐시관리는 프록시 서버가 하는게 아니라 해당 서버 블록에서 하게된다.
난 이것도모르고 계속 프록시 서버 설정에다가 캐시를 적용하고있었다...

location ^~ /css/ {
    expires 1y;
    add_header Cache-Control "public, max-age=31536000, immutable";
    try_files $uri =404;
    access_log off;
    log_not_found off;
}

location ^~ /js/ {
    expires 1y;
    add_header Cache-Control "public, max-age=31536000, immutable";
    try_files $uri =404;
    access_log off;
    log_not_found off;
}

location ^~ /fonts/ {
    expires 1y;
    add_header Cache-Control "public, max-age=31536000, immutable";
    try_files $uri =404;
    access_log off;
    log_not_found off;
}

location ~* \.(?:jpg|jpeg|webp|png|gif|svg|ico)$ {
    expires 30d;
    add_header Cache-Control "public, max-age=604800";
    access_log off;
    log_not_found off;
}

# 기존 / 로케이션 블럭위에 캐싱 파트를 배치
location / {
    try_files $uri $uri/ /index.php?$query_string;
}Copy

그래서 해당 웹서버가 작동되는 nginx/default.conf 파일을 열어 기존 / 로케이션 블록위에 캐싱 설정값을 적용하면 정상적으로 작동하는 것을 확인할 수 있다.

본문 이미지7일로 설정했을때 페이지스피드에서 뜨는 캐싱 리스트

7일은 너무짧아서 페이지스피드 경고에 뜨긴하는데, 30일정도로 늘려봐야겠다.

#문제해결 #Nginx #Ubuntu
0 개의 댓글
×