아무거나

리버스 프록시를 활용한 정적 리소스 캐시 본문

Infra/Nginx

리버스 프록시를 활용한 정적 리소스 캐시

전봉근 2019. 1. 31. 17:42
반응형

Nginx 리버스 프록시를 활용한 정적 리소스 캐시




  • 정적 자원(static resource) 캐시
    • proxy.conf 추가

      // path: vi /etc/nginx/conf.d/proxy.conf
      
      // css, js, gif, png, jpg, jpeg 파일을 전부 캐시한다. (바뀐 파라미터에 따라서 전부 캐시하게 된다.)
      server {
          ...
      
          location ~* \.(?:css|js|gif|png|jpg|jpeg)$ {
              proxy_pass http://127.0.0.1:8080;
              proxy_cache_valid 200 60m;
              proxy_cache cache_zone;
              expires 1y;
              access_log off;
              add_header X-Proxy-Cache $upstream_cache_status;
          }
      
          ...
      }
      
    • nginx.conf 추가

      // path: vi /etc/nginx/nginx.conf
      
      http {
          ...
      
          # cache storage
          # proxy_cache_path /var/cache/nginx/ levels=1:2 keys_zone=cache_zone:40m inactive=7d max_size=100m;
      
          ...
      }
      
    • nginx cache로 저장된 파일 확인

      // path: /data/cache/nginx/cache
      
      grep -rnw '찾고자하는 디렉토리 위치' -e "찾는 텍스트명"
      
    • 예를 들어 애니메이션 이미지를 캐싱할경우 currentTime으로 호출 파라미터를 지정하여 새로고침 할 때 마다 git파일을 새로 불러오도록 한다.

      <img src="/image/bong.gif?v=${currentTime}">
      

      만약 위와 같이 설정하고 캐시를 적용하면 유저가 많은 사이트는 금새 디스크가 꽉 찰 것이다. 그것을 방지하기위하여 기존 날짜형식의 파라미터 말고 범위안의 랜덤숫자를 사용하거나 gif가 캐시를 안타게 설정하는등의 여러 방법을 생각해보면 된다.

      // nginx에서 캐시되는 gif는 최대 1000이므로 실제 디스크에서 저장되는 양은 약 30MB정도이므로 1 ~ 1000의 랜덤한 숫자로 파라미터를 할당
      
      // 기존 날짜형식 파라미터
      String param = Long.toString(new Date().getTime());
      
      // 랜덤 숫자 파라미터
      int param = random.nexInt(1000);
      


반응형
Comments