Nginx proxy cache를 이용하여 이미지 캐시서버 구축하기 (Ubuntu, CentOS 8)
컨텐츠 정보
- 30,852 조회
- 4 댓글
- 0 추천
- 목록
본문
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
-
등록일 2020.09.18
-
등록일 2020.09.08도커 허브에서 매일 이미지 빌드하기댓글 2
-
등록일 2020.09.08
-
등록일 2020.07.19
관련자료
-
서명우성짱의 NAS를 운영하고 있습니다.
저의 즐거움이 여러분의 즐거움이면 좋겠습니다.