우분투 서버
설치 분류

그누보드 이미지 및 동영상 캐시 서버 구축 방법

컨텐츠 정보

  • 45,873 조회
  • 51 댓글
  • 0 추천
  • 목록

본문

3232235777_6cAnykfz_71dc5c356a51e01b2087e3fd947c0b05b38c0889.png




그누보드의 /data 폴더에 있는 이미지 및 동영상을 캐시 서버에서 트래픽을 나눌 수 있는 방법입니다.


이미지나 동영상이 많아서 트래픽이 많이 나온다면, 본 서버에서는 CPU 및 DB가 좋은 서버(국내)를 쓰고,


이미지 캐시 서버는 용량 및 트래픽이 높은 서버(해외 또는 국내 저렴한 서버)를 선택하면 비용 절약 및 속도에 도움이 될 것입니다.


현재 제 홈페이지의 이미지도 모두 cdn.wsgvet.com 에서 불러오고 있습니다.



준비사항



1. 본서버(실제 파일이 있는 서버, Origin Server)가 Nginx 또는 Apache로 구성되어 있을 것


https://www.wsgvet.com/ubuntu/126


위 링크처럼 편하게 그누보드를 Nginx에 올릴 수 있습니다.


Apache는 substitute 모듈을 활성화하면 됩니다.


밑에 설정 방법을 알려드리겠습니다.



2. 이미지 캐시서버 도메인의 IP를 캐시서버로 가리킬 것


클라우드플레어 같은 DNS셋팅에서 이미지캐시 서버의 도메인과 IP를 연결시켜야 합니다.


cdn.example.com 같은 서브도메인도 되고,  example2.com 처럼 완전히 다른 도메인이어도 상관없습니다.



3. 이미지 캐시서버는 Ubuntu 20.04 LTS 또는 CentOS 8 로 설정하기


다른 운영체제는 구현하지 않았습니다.



4. 80, 443 포트 방화벽을 열 것


Nginx가 80, 443 포트만 사용하므로 열어야 합니다.


80포트는 SSL 인증서 갱신에 반드시 필요합니다.


다른 포트는 닫아도 됩니다.



5. 이미지 캐시서버의 사용자(User)가 sudo 권한을 가질 것


아마 거의 가지고 있을 것입니다.



설치경로


/home/docker-cdn-webserver


위 경로에 설치됩니다.



스케쥴러


crontab에 3가지가 있습니다.


1. SSL 인증서 갱신 매일 검증 : 인증서 유효기간이 1달 남으면 자동으로 재발급 받고 Nginx를 재기동합니다.


2. Docker 이미지 최신화 : Certbot, Nginx, PHP의 Docker 최신버전이 나오면 자동으로 다운 받고 재기동합니다.


3. 캐시버서가 받은 이미지 및 동영상 파일 삭제 : #으로 비활성화 해뒀습니다. 일정기간이 지난 후 삭제하고 싶다면 #을 제거하고, 옵션을 수정할 수 있습니다. 상세설정 방법은 제일 밑에 참고사항의 Lael님 블로그에 있습니다.



설치방법


1. Ubuntu 20.04 LTS



sudo apt update -y && sudo apt upgrade -y && sudo apt install curl git cron -y && sudo apt autoremove -y


위 명령어로 패키지를 최신화하고, curl, git, cron 필수패키지를 설치합니다.


 


curl -o dc https://raw.githubusercontent.com/woosungchoi/docker-cdn-webserver/master/dc && bash dc setup && rm -f dc


위 명령어로 설치 스크립트를 다운받고 실행합니다.



2. CentOS 8



sudo yum -y update && sudo yum install -y curl git crontabs


위 명령어로 패키지를 최신화하고, curl, git, cron 필수패키지를 설치합니다.



curl -o dcc https://raw.githubusercontent.com/woosungchoi/docker-cdn-webserver/master/dcc && bash dcc setup && rm -f dcc


위 명령어로 설치 스크립트를 다운받고 실행합니다.


---


공통 설치진행방법


1. Enter your Origin domain :


위 내용은 본서버(실제 파일이 있는 서버, Origin Server)의 도메인을 물어보는 것입니다.


서브도메인은 빼고 넣어주세요. (예 : mydomain.com)



2. Enter your CDN domain : 


캐시서버의 도메인을 넣어주세요. (예 : cdn.mydomain.com)



3. Enter your Email address for SSL certificate :


Certbot의 인증서 등록을 위한 Email을 넣어주세요.



3가지를 입력했다면 자동으로 설치됩니다. 대략 5분이면 설치된 패키지가 나오면서 끝날 것입니다.


이미지 캐시서버는 끝났습니다. 참 쉽죠? 



---


본서버 설정방법


본서버(실제 파일이 있는 서버, Origin Server) 설정만 수정하면 됩니다.


(1) Nginx 웹서버 설정방법


https://www.wsgvet.com/ubuntu/126


위와 같은 방법으로 Nginx에 그누보드를 올린 것을 예시로 들어보겠습니다.


./gnuboard/nginx/conf.d/gnuboard.conf


위 파일을 열어보면



server {
        listen 80;
        listen [::]:80;


        server_name www.mydomain.com mydomain.com;


        # Useful for Let's Encrypt
        location /.well-known/acme-challenge/ { root /usr/share/nginx/html; allow all; }


        location / {
                rewrite ^ https://$host$request_uri? ;
        }
}


server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name www.mydomain.com mydomain.com;


        # www로 들어왔을 때 www를 제거해주는 역할입니다.
        if ($host != 'mydomain.com' ) {
                rewrite ^/(.*)$  https://mydomain.com/$1;
        }


        root /var/www/web/gnuboard;


        include /etc/nginx/conf.d/basic;
        include /etc/nginx/conf.d/gnuboard-rewrite;
}


대략 위와 같이 나와있을 것입니다.



sub_filter_once off;
    sub_filter 'https://mydomain.com/data/file/' 'https://cdn.mydomain.com/data/file/';
    sub_filter 'https://mydomain.com/data/editor/' 'https://cdn.mydomain.com/data/editor/';


위 내용을 넣으면 됩니다.


mydomain.com은 본서버의 도메인이고, cdn.mydomain.com은 이미지 캐시서버의 도메인입니다.




server {
        listen 80;
        listen [::]:80;


        server_name www.mydomain.com mydomain.com;


        # Useful for Let's Encrypt
        location /.well-known/acme-challenge/ { root /usr/share/nginx/html; allow all; }


        location / {
                rewrite ^ https://$host$request_uri? ;
        }
}


server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name www.mydomain.com mydomain.com;


        # www로 들어왔을 때 www를 제거해주는 역할입니다.
        if ($host != 'mydomain.com' ) {
                rewrite ^/(.*)$  https://mydomain.com/$1;
        }


        root /var/www/web/gnuboard;


        sub_filter_once off;
            sub_filter 'https://mydomain.com/data/file/' 'https://cdn.mydomain.com/data/file/';
            sub_filter 'https://mydomain.com/data/editor/' 'https://cdn.mydomain.com/data/editor/';


        include /etc/nginx/conf.d/basic;
        include /etc/nginx/conf.d/gnuboard-rewrite;
}


대략 위와 같이 될 것입니다.



sudo docker exec nginx nginx -s reload


위 명령어를 내려주면 본서버의 Nginx가 재시작됩니다.


---



sudo systemctl nginx reload


Nginx를 서버에 직접 설치했다면  위와 같이 nginx를 재기동 해주면 됩니다.


이제 끝났습니다. 본서버의 썸네일, 이미지, 동영상 파일이 모두 CDN 도메인으로 대치되었을 것입니다.



(2) Apache 웹서버 설정방법



sudo a2enmod substitute


위 명령어로 substitute 모듈을 활성화한 후



sudo systemctl restart apache2


위 명령어로 아파치 웹서버를 재시작해줍니다.


/etc/apache2/sites-enabled/


위 폴더에 있는 자신의 아파치 설정파일에서



<Location "/">
	AddOutputFilterByType SUBSTITUTE text/html
	Substitute "s|https://mydomain.com/data/file/|https://cdn.mydomain.com/data/file/|i"
	Substitute "s|https://mydomain.com/data/editor/|https://cdn.mydomain.com/data/editor/|i"
</Location>


위 내용을 적당히 넣어주면 됩니다.


mydomain.com은 본서버의 도메인이고, cdn.mydomain.com은 이미지 캐시서버의 도메인입니다.



sudo systemctl reload apache2


그리고 위 명령어로 아파치를 재기동하면 됩니다.


이제 끝났습니다. 본서버의 썸네일, 이미지, 동영상 파일이 모두 CDN 도메인으로 대치되었을 것입니다.


감사합니다.



참고사항


이미지 캐시 서버 구축하기 (나만의 CloudFlare 구축하기)


깃허브 소스 : https://github.com/woosungchoi/docker-cdn-webserver


깃허브 소스 : https://github.com/woosungchoi/my-image-cdn


아파치 substitute 모듈 설명 : https://httpd.apache.org/docs/2.4/mod/mod_substitute.html

관련자료

댓글 51 / 6 페이지
전체 34 / 1 페이지
RSS

최근글


새댓글


알림 0