본문 바로가기
서버구축 (WEB,DB)

MinIO 서비스 서브URL 또는 서브도메인 프록시 설정

by 날으는물고기 2023. 12. 24.

MinIO 서비스 서브URL 또는 서브도메인 프록시 설정

MinIO 서버 API 및 콘솔에 대한 두 가지 모델이 있습니다.

  1. MinIO 서비스를 위한 전용 DNS 이름을 만들거나 구성합니다.
  2. MinIO 서버 S3 API에 대한 요청은 해당 도메인의 루트로 프록시합니다.
  3. MinIO 콘솔 웹 GUI에 대한 요청은 /minio 하위 경로로 프록시합니다.

예를 들어, 호스트 이름이 minio.example.net 이라면

  • https://minio.example.net 으로 루트(/) 요청을 MinIO 서버(https://minio.local:9000)로 프록시합니다.
  • https://minio.example.net/minio/ui 로 요청을 MinIO 콘솔(https://minio.local:9090)로 프록시합니다.

다음은 고유한 환경에 대한 추가적인 사용자 정의를 위한 위치 블록 템플릿을 제공합니다.

upstream minio_s3 {
   least_conn;
   server minio-01.internal-domain.com:9000;
   server minio-02.internal-domain.com:9000;
   server minio-03.internal-domain.com:9000;
   server minio-04.internal-domain.com:9000;
}

upstream minio_console {
   least_conn;
   server minio-01.internal-domain.com:9090;
   server minio-02.internal-domain.com:9090;
   server minio-03.internal-domain.com:9090;
   server minio-04.internal-domain.com:9090;
}

server {
   listen       80;
   listen  [::]:80;
   server_name  minio.example.net;

   # 헤더에서 특수 문자 허용
   ignore_invalid_headers off;
   # 모든 크기의 파일 업로드 허용
   # 파일 크기를 특정 값으로 제한하려면 1000m과 같은 값을 설정
   client_max_body_size 0;
   # 버퍼링 비활성화
   proxy_buffering off;
   proxy_request_buffering off;

   location / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;

      proxy_connect_timeout 300;
      # 기본값은 HTTP/1, keepalive는 HTTP/1.1에서만 활성화됨
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      chunked_transfer_encoding off;

      proxy_pass https://minio_s3; # 이는 upstream 지시문 정의를 사용하여 로드 밸런싱
   }

   location /minio/ui/ {
      rewrite ^/minio/ui/(.*) /$1 break;
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-NginX-Proxy true;

      # 올바른 IP를 전달하기 위해 필요
      real_ip_header X-Real-IP;

      proxy_connect_timeout 300;

      # 2023년 1월 이후에 릴리스된 MinIO 버전에서 웹소켓 지원을 위해
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      # 일부 환경에서 CORS 오류가 발생할 수 있음 (Kubernetes + Nginx Ingress)
      # 원래 요청을 빈 문자열로 설정하려면 다음 라인의 주석 해제
      # proxy_set_header Origin '';

      chunked_transfer_encoding off;

      proxy_pass https://minio_console; # 이는 upstream 지시문 정의를 사용하여 로드 밸런싱
   }
}

S3 API 서명 계산 알고리즘

MinIO 서버 API를 예를 들어 example.net/s3/와 같은 프록시 스키마에서 호스팅하는 것은 지원하지 않습니다.

또한, MinIO 배포에 대해 다음 환경 변수를 설정해야 합니다.

  • MINIO_SERVER_URL을 MinIO 서버의 프록시 호스트 FQDN으로 설정 (https://minio.example.net)
  • MINIO_BROWSER_REDIRECT_URL을 MinIO 콘솔의 프록시 호스트 FQDN으로 설정 (https://example.net/minio/ui)

MinIO 서버 S3 API 및 MinIO 콘솔 웹 GUI에 대한 프록시 구성을 위해 서로 다른 서브도메인을 생성 또는 구성하는 방법을 안내합니다. 아래는 예시로 주어진 루트 도메인이 example.net인 경우를 가정합니다.

MinIO 서버 S3 API를 위한 서브도메인 minio.example.net 구성

upstream minio_s3 {
   least_conn;
   server minio-01.internal-domain.com:9000;
   server minio-02.internal-domain.com:9000;
   server minio-03.internal-domain.com:9000;
   server minio-04.internal-domain.com:9000;
}

server {
   listen       80;
   listen  [::]:80;
   server_name  minio.example.net;

   # 헤더에서 특수 문자 허용
   ignore_invalid_headers off;
   # 모든 크기의 파일 업로드 허용
   # 파일 크기를 특정 값으로 제한하려면 1000m과 같은 값을 설정
   client_max_body_size 0;
   # 버퍼링 비활성화
   proxy_buffering off;
   proxy_request_buffering off;

   location / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;

      proxy_connect_timeout 300;
      # 기본값은 HTTP/1, keepalive는 HTTP/1.1에서만 활성화됨
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      chunked_transfer_encoding off;

      proxy_pass http://minio_s3; # 이는 upstream 지시문 정의를 사용하여 로드 밸런싱
   }
}

MinIO 콘솔 웹 GUI를 위한 서브도메인 console.example.net 구성

upstream minio_console {
   least_conn;
   server minio-01.internal-domain.com:9090;
   server minio-02.internal-domain.com:9090;
   server minio-03.internal-domain.com:9090;
   server minio-04.internal-domain.com:9090;
}

server {
   listen       80;
   listen  [::]:80;
   server_name  console.example.net;

   # 헤더에서 특수 문자 허용
   ignore_invalid_headers off;
   # 모든 크기의 파일 업로드 허용
   # 파일 크기를 특정 값으로 제한하려면 1000m과 같은 값을 설정
   client_max_body_size 0;
   # 버퍼링 비활성화
   proxy_buffering off;
   proxy_request_buffering off;

   location / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-NginX-Proxy true;

      # 올바른 IP를 전달하기 위해 필요
      real_ip_header X-Real-IP;

      proxy_connect_timeout 300;

      # 웹소켓 지원을 위해
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";

      chunked_transfer_encoding off;

      proxy_pass http://minio_console/; # 이는 upstream 지시문 정의를 사용하여 로드 밸런싱
   }
}

S3 API 서명 계산 알고리즘

MinIO 서버 API를 예를 들어 minio.example.net/s3/와 같은 서브패스로 호스팅하는 것은 지원하지 않습니다.

또한, MinIO 배포에 대해 다음 환경 변수를 설정해야 합니다.

  • MINIO_SERVER_URL을 MinIO 서버의 프록시 호스트 FQDN으로 설정 (https://minio.example.net)
  • MINIO_BROWSER_REDIRECT_URL을 MinIO 콘솔의 프록시 호스트 FQDN으로 설정 (https://console.example.net/)
728x90

댓글