분류 웹서버

Nginx proxy cache를 이용하여 이미지 캐시서버 구축하기 (Ubuntu, CentOS 8)

컨텐츠 정보

본문

3232235777_l6INWzyY_7da2fac1b2ff831e80a1c410f0cc60032af84c56.png



1. Ubuntu 20.04 LTS


https://nginx.org/en/linux_packages.html


위 링크에 있는 방식으로 Nginx를 설치하고 


ufw나 iptables에 의한 80, 443 포트를 열어줍니다.


SSL 인증서도 적절하게 설치해줍니다.



/etc/nginx/sites-available/default.conf


파일을 열어서



proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static:100m max_size=10g inactive=30d;
proxy_cache_key "$scheme$request_method$host$request_uri";


server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name cdn.example.com; # 이미지 캐시서버 도메인
        server_tokens off;


        location ~* \.(?:css|js|gif|png|jpg|jpeg|mp4|webm)$ {
                valid_referers none blocked example.com; # 본서버 외 불펌금지
                if ($invalid_referer) {
                    return   403;
                }
                proxy_pass https://example.com; # 본서버 도메인
                proxy_cache_valid 200 301 302 600m;
                proxy_cache static;
                proxy_cache_use_stale  error timeout updating http_500 http_502 http_503 http_504;
                proxy_cache_revalidate on;
                proxy_cache_lock       on;
                proxy_ignore_headers Set-Cookie;
                access_log off;
                add_header My-Cache-Status $upstream_cache_status;
                add_header my-ray  "KR";
                sendfile on;
                tcp_nopush on;
                tcp_nodelay on;
                keepalive_timeout 65;
                }


        location / { 
                return   403;
        }


        ssl_certificate ssl/fullchain.pem; #자신의 인증서 경로로..
        ssl_certificate_key ssl/privkey.pem; #자신의 인증서 경로로..
        ssl_trusted_certificate ssl/chain.pem; #자신의 인증서 경로로..


        ssl_stapling on;
        ssl_stapling_verify on;
        resolver 8.8.8.8 8.8.4.4 valid=300s;
        resolver_timeout 10s;
}


위와 같이 수정하고,



sudo service nginx restart


위 명령어로 재시작해줍니다.


적용이 끝났습니다.



이제 본서버에 가서 css,js,gif,png,jpg,jpeg,mp4,webm파일의 URL을 캐시서버의 도메인으로 수정해주면 됩니다.


(1) 본서버가 Nginx라면



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/';


위와 같이 정적파일이 있는 폴더를 대치시키면 편합니다.


Nginx를 재시작하면 적용 끝입니다.



(2) 본서버가 Apache라면



sudo a2enmod substitute


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



<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>


위와 같이 정적파일이 있는 폴더를 대치시키면 편합니다.


Apache를 재시작하면 적용 끝입니다.



2. CentOS 8


https://nginx.org/en/linux_packages.html


위 링크의 방식대로 Nginx를 설치합니다.


SSL 인증서도 설치해줍니다.



sudo firewall-cmd --zone=public --permanent --add-service=http



sudo firewall-cmd --zone=public --permanent --add-service=https


위와 같이 firewall 설정에서 80, 443 포트를 열어줍니다.


iptables 규칙이 걸려있다면 따로 잡아주세요.



/etc/nginx/default.conf


위 파일을 열어서


server { } 안의 내용을



proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static:100m max_size=10g inactive=30d;
proxy_cache_key "$scheme$request_method$host$request_uri";


server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name cdn.example.com; # 이미지 캐시서버 도메인
        server_tokens off;


        location ~* \.(?:css|js|gif|png|jpg|jpeg|mp4|webm)$ {
                valid_referers none blocked example.com; # 본서버 외 불펌금지
                if ($invalid_referer) {
                    return   403;
                }
                proxy_pass https://example.com; # 본서버 도메인
                proxy_cache_valid 200 301 302 600m;
                proxy_cache static;
                proxy_cache_use_stale  error timeout updating http_500 http_502 http_503 http_504;
                proxy_cache_revalidate on;
                proxy_cache_lock       on;
                proxy_ignore_headers Set-Cookie;
                access_log off;
                add_header My-Cache-Status $upstream_cache_status;
                add_header my-ray  "KR";
                sendfile on;
                tcp_nopush on;
                tcp_nodelay on;
                keepalive_timeout 65;
                }


        location / { 
                return   403;
        }


        ssl_certificate ssl/fullchain.pem; #자신의 인증서 경로로..
        ssl_certificate_key ssl/privkey.pem; #자신의 인증서 경로로..
        ssl_trusted_certificate ssl/chain.pem; #자신의 인증서 경로로..


        ssl_stapling on;
        ssl_stapling_verify on;
        resolver 8.8.8.8 8.8.4.4 valid=300s;
        resolver_timeout 10s;
}


위의 내용으로 바꿔줍니다.



sudo systemctl restart nginx


수정 후 위 명령어로 nginx를 재시작해줍니다.


이미지 캐시서버 구축이 끝났습니다.



이제 본서버에 가서 css,js,gif,png,jpg,jpeg,mp4,webm파일의 URL을 캐시서버의 도메인으로 수정해주면 됩니다.


(1) 본서버가 Nginx라면



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/';


위와 같이 정적파일이 있는 폴더를 대치시키면 편합니다.


Nginx를 재시작하면 적용 끝입니다.



(2) 본서버가 Apache라면



sudo a2enmod substitute


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



<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>


위와 같이 정적파일이 있는 폴더를 대치시키면 편합니다.


Apache를 재시작하면 적용 끝입니다.




Centos 8에 적용 후, 502 Bad Gateway가 떴을 때 


캐시서버에 SSH로 접속 후



sudo getenforce


위 명령어를 내린 후 



Enforcing


위와 같이 나오면



sudo setsebool -P httpd_can_network_connect true


위 명령어로 Outbound를 풀어줍니다.



sudo systemctl restart nginx


위 명령어로 Nginx를 재시작해줍니다.




참고 사이트


https://nginx.org/en/linux_packages.html


https://www.runit.cloud/2020/05/centos-8-nginx-1.18-install.html


https://www.joinc.co.kr/w/man/12/proxy


https://jojoldu.tistory.com/60


https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path


https://serverfault.com/questions/819423/reverse-proxy-nginx-bad-gateway

관련자료

  • 서명
    우성군의 NAS를 운영하고 있습니다.

    저의 즐거움이 여러분의 즐거움이면 좋겠습니다.

댓글 0
등록된 댓글이 없습니다.
Total 43 / 1 Page
RSS
Docker에 code-server 설치하는 방법

웹서버 code-server는 쉽게말해 VS Code를 서버에 직접 설치하는 것입니다.설치 후 웹브라우저에서 해당 URL이나 포트에 접근하면, 웹브라우…

도커 허브에서 매일 이미지 빌드하기 댓글 2

웹서버 Dockerfile을 만들고 Github와 연동해서 도커허브에 이미지를 만들 수 있습니다.하지만 위 스샷에 있듯이, 비공식 이미지 업데이트가 되…

Outline Manager 삭제 후 복원하는 방법

기타 1. 들어가며오늘 컴퓨터를 포맷했는데, outline manager(아웃라인 매니저)를 복원하는 방법을 몰랐습니다.초기 설치 때 SSH상에 떴던…

Caddy 웹서버 설치 및 그누보드 설정하기 댓글 4

웹서버 1. 들어가며Caddy는 기존의 웹서버보다 더 쉽고 간단하게 설치 및 유지 보수를 할 수 있습니다.SSL 인증서 자동발급 및 갱신하는 것이 큰 …

AlphaSSL 와일드카드 인증서 설치와 OCSP 설정 (Nginx용) 댓글 3

SSL 1. 와일드카드 인증서와 Letsencrypt 인증서와의 비교 현재 제 홈페이지에는 AlphaSSL의 와일드카드 인증서가 설치되어 있습니다. 와…

최근글


새댓글