Development/Environment

Nginx 환경 설정으로 원하는 자원(CSS,JS,이미지)만 캐싱하기

고고마코드 2023. 10. 17. 14:19
반응형

Nginx 설정 (수정 전)

server {
    listen 80;

    location / {
        auth_request /auth;
        proxy_pass https://front_new;
    }

    #인증
    location = /auth {
        ...
    }
}

문제점

Nginx 환경 설정으로 자원(CSS,JS,이미지)만 캐싱한 이유

Angular 프로젝트의 웹서버로 Nginx를 사용하고 있습니다.
메인 화면에서 로그인이 되지 않은 상태면 로그인 url로 넘기고 있는데,
문제는 이 과정에서 Nginx에서 설정한 auth_request가 호출되지 않고 브라우저 캐시로 인해 redirect 되고 있습니다.
예를 들어 'example.com/' 을 호출하면 'example.com/login' 으로 redirect 됩니다.
이 과정에서 보안 목적으로 설정한 auth_request를 정상적으로 수행하지 않아서 자원(CSS, JS, 이미지 등)은 캐싱하고 페이지는 캐싱하지 않는 설정을 추가했습니다.

Nginx 설정 (수정 후)

개별 수정 코드

CSS,JS 캐싱

location ~* \.(?:css|js)$ {
    root /app-front;
    expires 30d;
    add_header Cache-Control "public";
}
  • root : 캐싱이 되는 빌드된 파일이 있는 곳
  • expires : 캐싱 기간
  • add_header Cache-Control : HTTP 응답 헤더에 'Cache-Control' 헤더를 추가해서 브라우저 또는 중간 프록시 서버에서 캐시에 관한 설정을 추가. 'public' 옵션은 리소스가 공용 캐시에 저장될 수 있음을 나타낸다.

이미지,폰트 등 캐싱

location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
    root /app-front;
    expires 1M;
    add_header Cache-Control "public";
}

기존 코드에 캐싱하지 않도록 설정

location / {
    add_header Cache-Control "no-cache";

    auth_request /auth;
    proxy_pass https://front_new;
}

add_header Cache-Control : 'no-cache'는 매번 원래 서버에 접근하여 데이터를 검증한다.

전체 수정 코드

server {
    listen 80;

    location / {
        add_header Cache-Control "no-cache";

        auth_request /auth;
        proxy_pass https://front_new;
    }

    #인증
    location = /auth {
        ...
    }

    location ~* \.(?:css|js)$ {
        root /app-front;

        expires 30d;
        add_header Cache-Control "public";
    }

    location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
        root /app-front;

        expires 1M;
        add_header Cache-Control "public";
    }
}
반응형