Linux
[nginx] reverse proxy 에서 프록시 캐시서버(CDN) 적용하기 (centos 7)
- 2024.03.27 10:58:40
사진등 용량이 큰 리소스를 별도 서버에서 reverse proxy하여 웹사이트에 노출시키고 있다면 접속자에게 1M 용량의 이미지를 노출시킬 때 프록싱간 in/out bound 를 합쳐 트래픽을 총 3M를 소진하게 되는데, 접속자를 통해 한번 호출된 파일을 프록시 서버에 캐시파일로 저장해 두고 반환한다면 out-bound 트래픽 1M만 소진하게 되어 트래픽을 1/3 수준으로 절감할 수 있다. 이를 Cache server (CDN)이라고 하며, nginx 에서는 간단한 설정으로 캐시서버 구축이 가능하다. [!]캐시서버가 필요하게 된 배경[/!] 내가 운영중인 사진 블로그는 웹서버와 사진이 보관된 스토리지 서버가 분리되어 있으며, 글 마다 노출되는 사진 파일이 총 10M이상 된다. 접속자 한명이 블로그 글 하나를 조회하게 되면 프록시 서버와 스토리지서버(사진이 보관된)간 통신하는 과정에 총 30M 이상의 트래픽을 소진하게 되는데 100명의 접속자가 글을 조회 한다면 3G 이상의 트래픽을 유발 시킨다. [접속자] <-- out 10M 소진 -- [프록시서버] <-- in/out 20M --> [스토리지서버]
블로그 글에서 제공되는 사진은 10M지만, 총 30M 트래픽을 소진하게 됨. 따라서, 캐시서버를 구축하여 이미지 파일을 프록시서버에 보관하게 된다면 트래픽이 스토리지 서버까지 다녀올 필요가 없기 때문에 클라이언트에게 out-bound 되는 10M만 소진하면 된다. [!]nginx.conf 설정[/!] 먼저, 캐시와 temp등의 경로 설정을 위해 nginx.conf 파일을 수정한다. # /etc/nginx/nginx.conf
vi로 설정 파일을 열어 아래와 같이 설정한다. ...
http { ... proxy_cache_path /etc/nginx/cache/ levels=1:2 keys_zone=cache_zone:40m inactive=7d max_size=100m; proxy_temp_path /etc/nginx/cache_temp/; include /etc/nginx/conf.d/*.conf; ... } 1) proxy_cache_path : 캐시 저장소 경로를 설정한다. - levels : 하위 디렉토리의 깊이 - key_zone : 캐시존 이름 - inactive : 캐시 파일이 정해진 기간만큼 사용되지 않는다면 캐시에서 제거 2) proxy_temp_path : temp 파일이 저장될 경로를 설정한다. [!]vietualhost 설정[/!] 특정 호스팅에 캐시를 적용하기 위해 conf 파일을 열어 세부 설정을 한다. # vi /etc/nginx/conf.d/000.net.conf
(virtual host 설정을 위해 생성한 conf 파일을 연다.) virtual host 의 conf 파일을 vi로 연 다음 아래와 같이 작성한다. server {
location / { ... # cache proxy_cache cache_zone; # cache data 7일 동안 보관 expires 7d; # cache 업데이트 충돌시 잠금시간 proxy_cache_lock_timeout 5s; # cache method 설정 proxy_cache_methods GET HEAD POST; # cache 결과코드를 20분동안 보관 proxy_cache_valid 200 401 301 304 20m; # cache 상태를 헤더로 보여줌. (MISS, HIT 등) add_header X-Proxy-Cache $upstream_cache_status; # cache-control 설정 add_header Cache-Control "public"; # 다음 클라이언트 헤더 무시 proxy_ignore_headers X-Accel-Expires Expires Cache-Control; ... } } 설정이 완료 되었다면 nginx 를 재시작 한다. # systemctl restart nginx
[!]브라우저에서 캐싱 여부 확인하기[/!] 설정을 모두 마쳤다면, 프록싱이 적용된 사이트를 접속하여 브라우저 작업관리자를 통해 캐싱 여부를 확인해본다. 1) 최초 요청으로 캐싱되지 않은 이미지가 노출된 경우 > X-Proxy-Caches : MISS 노출 2) 캐싱이 적용된 이미지인 경우 > X-Proxy-Caches : HIT 노출 |