이것은 클라우드 애플리케이션과 앱 개발 및 제공에 대한 DevOps 접근 방식을 전문으로 하는
분산 객체 스토리지 서버인 Minio 의 소프트웨어 개발자인 Nitish Tiwari의 게스트 블로그 게시물입니다 .
Nitish의 관심사에는 소프트웨어 기반 인프라, 특히 스토리지 및 분산 시스템이 포함됩니다.
이 게시물에서 Nitish는 NGINX와 NGINX Plus를 Minio 서버의 역방향 프록시 및 로드 밸런서로 사용하는 방법을 설명합니다 .
이 게시물은 NGINX와 NGINX Plus에 동일하게 적용됩니다. 간결하게 NGINX Plus만 참조합니다.
객체 저장소 설계
거의 모든 애플리케이션은 저장소가 필요하지만, 다른 앱은 특정 방식으로 저장소를 필요로 하고 사용합니다.
예를 들어, 문서 저장소를 살펴보겠습니다.
작을 때는 빈번한 읽기 요청을 처리할 필요가 없지만 시간이 지남에 따라 확장해야 합니다.
이미지 갤러리와 같은 다른 애플리케이션은 요청을 빠르게 충족하고 시간에 따라 확장해야 합니다.
이러한 미묘한 차이로 인해 스토리지 설정이 어려워집니다. 그러나 모든 것이 어렵지는 않습니다.
구조화되지 않은 데이터를 저장하는 기본 방법으로 객체 스토리지가 등장하면서 HTTP가 기본 통신 모드가 되었고,
애플리케이션과 스토리지가 통신하는 방식은 표준화 되었습니다.
그래도 여전히 의문은 남습니다.
애플리케이션 요구 사항에 맞게 조정되면서도 유연한 개체 스토리지 설정을 어떻게 구축할 수 있을까요?
개체 스토리지에는 HTTP 서버와 클라이언트가 포함되므로 HTTP 트래픽을 처리하기 위해
NGINX Plus와 같은 다재다능한 웹 서버를 앞에 두는 것이 합리적입니다.
Minio와 같은 가벼운 개체 스토리지 서버를 사용하면 백엔드에서 확장 가능한 스토리지를 제공할 수 있습니다.
시스템의 유연성은 엔터프라이즈급 서비스를 만드는 데 핵심입니다.

NGINX Plus는 SSL/TLS 클라이언트 연결을 종료하고 Minio 클라우드 스토리지 서버의 부하를 분산합니다.
NGINX Plus를 사용하면 관리자는 들어오는 트래픽의 부하를 분산할 수 있을 뿐만 아니라 SSL/TLS를 캐시, 제한, 종료하고
다양한 매개변수에 따라 트래픽을 필터링할 수도 있습니다.
반면 Minio는 Amazon S3 와 호환되는 가벼운 개체 스토리지 서버를 제공합니다 .
MinIO는 AI 스토리지를 위해 구축되었으며 사진, 비디오, 로그 파일, 백업,
VM 및 컨테이너 이미지와 같은 비정형 데이터를 저장하는 데 가장 적합합니다.
Minio 서버는 Node.js, Redis, MySQL과 유사하게 애플리케이션 스택과 함께 번들로 제공될 만큼 가볍습니다.
Minio는 또한 분산 모드를 지원하여 여러 드라이브(다른 머신에서도)를 단일 개체 스토리지 서버로 풀링할 수 있습니다.
이 게시물에서는 다양한 사용 사례에서 NGINX Plus의 일부 기능을 살펴보고,
이를 Minio와 결합하여 프로덕션 등급의 높은 확장성과 가용성, 안정성을 갖춘 개체 스토리지 시스템을 설정하는 방법을 알아봅니다.
역방향 프록시 및 로드 밸런서로서의 NGINX Plus
NGINX Plus는 역방향 프록시 서버로 잘 알려져 있습니다.
하지만 Minio에 역방향 프록시가 필요한 이유는 무엇일까요? 몇 가지 사용 사례를 살펴보겠습니다.
- 하나 이상의 Minio 서버 앞에 NGINX Plus 역방향 프록시를 사용하면 클라이언트나 애플리케이션을 업데이트하지 않고도
- 시간이 지남에 따라 Minio 서버 인스턴스를 다른 머신/위치로 옮길 수 있는 자유가 생깁니다.
- NGINX Plus는 유입 트래픽의 부하를 분산하고 이를 분산된 Minio 서버 인스턴스에 균등하게 분산할 수 있습니다.
- mcNGINX Plus 프록시는 Minio Client( ) 명령을 사용하여 Minio를 통한 고가용성 개체 스토리지 설정의 일부가 될 수 있습니다 mirror.
NGINX Plus는 지시문에서 지정한 URL에서 수신 대기하는 백엔드 서버에 요청을 전달하여 클라이언트 트래픽을 역방향 프록시합니다
proxy_pass. 다음 구성 스니펫에서 독립형 Minio 인스턴스는 에서 실행 중이므로 http://localhost:9000localhost 에서 사용할 수 있습니다.
www.example.com 의 최상위 디렉토리( / ) 에 대한 포트 80에서 들어오는 모든 요청은 Minio로 전달됩니다.
NGINX Plus는 헤더를 원래 요청의 값으로 명시적으로 설정합니다 .Host
server {
listen 80;
server_name www.example.com;
location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:9000;
}
}여러 Minio 서버가 있는 경우 upstream구성 블록에 서버를 나열하고
지시문에서 업스트림 그룹을 참조하여 서버 간 트래픽 부하를 분산합니다 proxy_pass.
upstream minio_servers {
server minio-server-1:9000;
server minio-server-2:9000;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_set_header Host $http_host;
proxy_pass http://minio_servers;
}
}Minio의 프록시로 NGINX 또는 NGINX Plus를 설정하는 방법에 대한 자세한 내용은 Minio 설명서를 참조하세요 .
SSL/TLS 종료
HTTPS가 이제 많은 웹 트래픽의 기본 프로토콜이 되면서
Minio에 단순한 HTTP 서버가 아닌 HTTPS 서버를 배포하는 것이 합리적입니다.
NGINX Plus를 HTTPS 서버로 설정하는 것은 매우 쉽습니다.
시작하려면 SSL/TLS 인증서가 필요합니다.
Let's Encrypt는 무료 SSL/TLS 인증서를 제공하고 NGINX Plus와 통합합니다 .
다음 단계는 NGINX Plus 구성 파일을 편집하는 것입니다.
여기서 블록 의 지시문 ssl에 매개변수를 지정한 다음 서버 인증서와 개인 키가 포함된 파일을 지정해야 합니다 .listenserver
server {
listen 80;
server_name www.example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location /
{ proxy_set_header Host $http_host;
proxy_pass http://localhost:9000; }
}SSL/TLS 종료에 대한 자세한 내용은 NGINX Plus 관리자 가이드를 참조하세요 .
캐싱
개체 스토리지 서버는 속도가 빠르기로 유명하지 않지만,
그렇다고 해서 클라이언트에 대한 응답이 느리다는 것은 아닙니다.
NGINX Plus 서버에서 캐싱을 활성화하면 자주 액세스하는 데이터를 저장하여
백엔드 서버로 요청을 전달하지 않고도 클라이언트에 즉시 반환할 수 있습니다.
작동 방식은 다음과 같습니다.
NGINX Plus 웹 캐시는 클라이언트와 Minio 사이에 위치하여 요청된 각 콘텐츠 파일의 사본을 저장합니다.
클라이언트가 캐시에 저장된 콘텐츠를 요청하면 NGINX Plus는 Minio에 연결하지 않고 직접 반환합니다.
이를 통해 클라이언트에 대한 응답 시간이 개선되고 Minio 서버의 부하가 줄어듭니다.
proxy_cache_path및 지시어 로 Minio용 NGINX Plus 캐시를 설정합니다
proxy_cache. proxy_cache_path지시어는 캐시의 위치와 구성을 설정하고 지시어는 proxy_cache이를 활성화합니다.
자세한 내용은 NGINX 및 NGINX Plus로 캐싱하기 가이드를 참조하세요 .
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
# ... location / {
proxy_cache my_cache;
proxy_set_header Host $http_host;
proxy_pass http://localhost:9000;
}
}조절
때로는 비즈니스 또는 보안상의 이유로 요청을 제한해야 합니다.
NGINX Plus를 사용하면 사용 가능한 대역폭, 요청 수 또는 연결 수를 제한할 수 있습니다.
대역폭을 조절하려면 limit_rate지시어를 사용합니다. 이 예에서는 다운로드 속도를 초당 200KB로 제한합니다.
server { # ... location /images/ { limit_rate 200k; # ... }
}요청 제한의 경우 이 예에서처럼 limit_req및 limit_req_zone지침을 사용하면
각 고유 IP 주소를 초당 10개의 요청으로 제한하고 최대 20개의 요청 버스트를 허용합니다.
limit_req_zone $binary_remote_addr zone=my_req_limit:10m rate=10r/s;
server { # ... location /images/ {
limit_req zone=my_req_limit burst=20;
# ... }
}연결 수를 제한하려면 limit_conn및 limit_conn_zone지시어를 사용합니다.
이 예에서는 각 고유 IP 주소를 동시 연결 5개로 제한합니다.
limit_conn_zone $binary_remote_addr zone=my_conn_limit:10m;
server { # ... location /images/ {
limit_conn my_conn_limit 5;
# ... }
}자세한 내용은 NGINX Plus 관리자 가이드를 참조하세요 .
요약
이 게시물에서는 로드 밸런싱을 위한 여러 NGINX Plus 기능의 사용을 시연했습니다.
특히 Minio 개체 스토리지 서버 앞에서 로드 밸런싱을 위한 것입니다.
NGINX Plus와 Minio를 결합하면 애플리케이션 요구 사항에 맞게 조정된 유연한 개체 스토리지 서버를 설정할 수 있습니다.
위 내용과 같이 NGINX Plus 를 활용하여 Demo 가 필요하시면 하단의 전문가에게 상담받기 버튼을 클릭해주세요
이것은 클라우드 애플리케이션과 앱 개발 및 제공에 대한 DevOps 접근 방식을 전문으로 하는
분산 객체 스토리지 서버인 Minio 의 소프트웨어 개발자인 Nitish Tiwari의 게스트 블로그 게시물입니다 .
Nitish의 관심사에는 소프트웨어 기반 인프라, 특히 스토리지 및 분산 시스템이 포함됩니다.
이 게시물에서 Nitish는 NGINX와 NGINX Plus를 Minio 서버의 역방향 프록시 및 로드 밸런서로 사용하는 방법을 설명합니다 .
이 게시물은 NGINX와 NGINX Plus에 동일하게 적용됩니다. 간결하게 NGINX Plus만 참조합니다.
객체 저장소 설계
거의 모든 애플리케이션은 저장소가 필요하지만, 다른 앱은 특정 방식으로 저장소를 필요로 하고 사용합니다.
예를 들어, 문서 저장소를 살펴보겠습니다.
작을 때는 빈번한 읽기 요청을 처리할 필요가 없지만 시간이 지남에 따라 확장해야 합니다.
이미지 갤러리와 같은 다른 애플리케이션은 요청을 빠르게 충족하고 시간에 따라 확장해야 합니다.
이러한 미묘한 차이로 인해 스토리지 설정이 어려워집니다. 그러나 모든 것이 어렵지는 않습니다.
구조화되지 않은 데이터를 저장하는 기본 방법으로 객체 스토리지가 등장하면서 HTTP가 기본 통신 모드가 되었고,
애플리케이션과 스토리지가 통신하는 방식은 표준화 되었습니다.
그래도 여전히 의문은 남습니다.
애플리케이션 요구 사항에 맞게 조정되면서도 유연한 개체 스토리지 설정을 어떻게 구축할 수 있을까요?
개체 스토리지에는 HTTP 서버와 클라이언트가 포함되므로 HTTP 트래픽을 처리하기 위해
NGINX Plus와 같은 다재다능한 웹 서버를 앞에 두는 것이 합리적입니다.
Minio와 같은 가벼운 개체 스토리지 서버를 사용하면 백엔드에서 확장 가능한 스토리지를 제공할 수 있습니다.
시스템의 유연성은 엔터프라이즈급 서비스를 만드는 데 핵심입니다.
NGINX Plus는 SSL/TLS 클라이언트 연결을 종료하고 Minio 클라우드 스토리지 서버의 부하를 분산합니다.NGINX Plus를 사용하면 관리자는 들어오는 트래픽의 부하를 분산할 수 있을 뿐만 아니라 SSL/TLS를 캐시, 제한, 종료하고
다양한 매개변수에 따라 트래픽을 필터링할 수도 있습니다.
반면 Minio는 Amazon S3 와 호환되는 가벼운 개체 스토리지 서버를 제공합니다 .
MinIO는 AI 스토리지를 위해 구축되었으며 사진, 비디오, 로그 파일, 백업,
VM 및 컨테이너 이미지와 같은 비정형 데이터를 저장하는 데 가장 적합합니다.
Minio 서버는 Node.js, Redis, MySQL과 유사하게 애플리케이션 스택과 함께 번들로 제공될 만큼 가볍습니다.
Minio는 또한 분산 모드를 지원하여 여러 드라이브(다른 머신에서도)를 단일 개체 스토리지 서버로 풀링할 수 있습니다.
이 게시물에서는 다양한 사용 사례에서 NGINX Plus의 일부 기능을 살펴보고,
이를 Minio와 결합하여 프로덕션 등급의 높은 확장성과 가용성, 안정성을 갖춘 개체 스토리지 시스템을 설정하는 방법을 알아봅니다.
역방향 프록시 및 로드 밸런서로서의 NGINX Plus
NGINX Plus는 역방향 프록시 서버로 잘 알려져 있습니다.
하지만 Minio에 역방향 프록시가 필요한 이유는 무엇일까요? 몇 가지 사용 사례를 살펴보겠습니다.
NGINX Plus는 지시문에서 지정한 URL에서 수신 대기하는 백엔드 서버에 요청을 전달하여 클라이언트 트래픽을 역방향 프록시합니다
proxy_pass. 다음 구성 스니펫에서 독립형 Minio 인스턴스는 에서 실행 중이므로 http://localhost:9000localhost 에서 사용할 수 있습니다.
www.example.com 의 최상위 디렉토리( / ) 에 대한 포트 80에서 들어오는 모든 요청은 Minio로 전달됩니다.
NGINX Plus는 헤더를 원래 요청의 값으로 명시적으로 설정합니다 .Host
server { listen 80; server_name www.example.com; location / { proxy_set_header Host $http_host; proxy_pass http://localhost:9000; } }여러 Minio 서버가 있는 경우 upstream구성 블록에 서버를 나열하고
지시문에서 업스트림 그룹을 참조하여 서버 간 트래픽 부하를 분산합니다 proxy_pass.
upstream minio_servers { server minio-server-1:9000; server minio-server-2:9000; } server { listen 80; server_name www.example.com; location / { proxy_set_header Host $http_host; proxy_pass http://minio_servers; } }Minio의 프록시로 NGINX 또는 NGINX Plus를 설정하는 방법에 대한 자세한 내용은 Minio 설명서를 참조하세요 .
SSL/TLS 종료
HTTPS가 이제 많은 웹 트래픽의 기본 프로토콜이 되면서
Minio에 단순한 HTTP 서버가 아닌 HTTPS 서버를 배포하는 것이 합리적입니다.
NGINX Plus를 HTTPS 서버로 설정하는 것은 매우 쉽습니다.
시작하려면 SSL/TLS 인증서가 필요합니다.
Let's Encrypt는 무료 SSL/TLS 인증서를 제공하고 NGINX Plus와 통합합니다 .
다음 단계는 NGINX Plus 구성 파일을 편집하는 것입니다.
여기서 블록 의 지시문 ssl에 매개변수를 지정한 다음 서버 인증서와 개인 키가 포함된 파일을 지정해야 합니다 .listenserver
server { listen 80; server_name www.example.com; return 301 https://www.example.com$request_uri; } server { listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_set_header Host $http_host; proxy_pass http://localhost:9000; } }SSL/TLS 종료에 대한 자세한 내용은 NGINX Plus 관리자 가이드를 참조하세요 .
캐싱
개체 스토리지 서버는 속도가 빠르기로 유명하지 않지만,
그렇다고 해서 클라이언트에 대한 응답이 느리다는 것은 아닙니다.
NGINX Plus 서버에서 캐싱을 활성화하면 자주 액세스하는 데이터를 저장하여
백엔드 서버로 요청을 전달하지 않고도 클라이언트에 즉시 반환할 수 있습니다.
작동 방식은 다음과 같습니다.
NGINX Plus 웹 캐시는 클라이언트와 Minio 사이에 위치하여 요청된 각 콘텐츠 파일의 사본을 저장합니다.
클라이언트가 캐시에 저장된 콘텐츠를 요청하면 NGINX Plus는 Minio에 연결하지 않고 직접 반환합니다.
이를 통해 클라이언트에 대한 응답 시간이 개선되고 Minio 서버의 부하가 줄어듭니다.
proxy_cache_path및 지시어 로 Minio용 NGINX Plus 캐시를 설정합니다
proxy_cache. proxy_cache_path지시어는 캐시의 위치와 구성을 설정하고 지시어는 proxy_cache이를 활성화합니다.
자세한 내용은 NGINX 및 NGINX Plus로 캐싱하기 가이드를 참조하세요 .
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { # ... location / { proxy_cache my_cache; proxy_set_header Host $http_host; proxy_pass http://localhost:9000; } }조절
때로는 비즈니스 또는 보안상의 이유로 요청을 제한해야 합니다.
NGINX Plus를 사용하면 사용 가능한 대역폭, 요청 수 또는 연결 수를 제한할 수 있습니다.
대역폭을 조절하려면 limit_rate지시어를 사용합니다. 이 예에서는 다운로드 속도를 초당 200KB로 제한합니다.
server { # ... location /images/ { limit_rate 200k; # ... } }요청 제한의 경우 이 예에서처럼 limit_req및 limit_req_zone지침을 사용하면
각 고유 IP 주소를 초당 10개의 요청으로 제한하고 최대 20개의 요청 버스트를 허용합니다.
limit_req_zone $binary_remote_addr zone=my_req_limit:10m rate=10r/s; server { # ... location /images/ { limit_req zone=my_req_limit burst=20; # ... } }연결 수를 제한하려면 limit_conn및 limit_conn_zone지시어를 사용합니다.
이 예에서는 각 고유 IP 주소를 동시 연결 5개로 제한합니다.
limit_conn_zone $binary_remote_addr zone=my_conn_limit:10m; server { # ... location /images/ { limit_conn my_conn_limit 5; # ... } }자세한 내용은 NGINX Plus 관리자 가이드를 참조하세요 .
요약
이 게시물에서는 로드 밸런싱을 위한 여러 NGINX Plus 기능의 사용을 시연했습니다.
특히 Minio 개체 스토리지 서버 앞에서 로드 밸런싱을 위한 것입니다.
NGINX Plus와 Minio를 결합하면 애플리케이션 요구 사항에 맞게 조정된 유연한 개체 스토리지 서버를 설정할 수 있습니다.
위 내용과 같이 NGINX Plus 를 활용하여 Demo 가 필요하시면 하단의 전문가에게 상담받기 버튼을 클릭해주세요
전문가에게 상담받기