Nginx 프록시 서버 뒤에 MinIO 멀티 서버 인스턴스를 실행하고 있습니다.
MinIO 연동 과정에서 문제가 있었는데, 오늘 확인해보니 업로드된 이미지를 표시하려면 'S3 CDN URL’을 'cdn.example.com’이 아닌 'cdn.example.com/bucket_name’으로 설정해야 하는 것을 발견했습니다.
제 MinIO 설정 문제일 수도 있으니 여기에서 조금 더 많은 정보를 드리겠습니다.
같은 콘텐츠를 위해 두 대의 서버에서 MinIO를 실행하고 있습니다. 둘 다 192.168.1.1과 192.168.1.2와 같은 내부 IP로 매핑되어 있습니다. API 접근 포트는 9000, 콘솔 접근 포트는 9001입니다. (실제로는 다른 IP와 포트를 사용하지만, 설명을 위해 이렇게 표기합니다.)
처음에는 ‘S3 endpoint’ 설정에 어려움을 겪었습니다.
엔드포인트를 'https://cdn.example.com’으로 설정했을 때 계속 오류가 발생했습니다. Nginx 프록시 서버 레벨에서 콘솔 트래픽을 분산시키는 데 사용하는 's3.example.com’과 같은 콘솔 접근 URL로도 시도해 보았지만, 둘 다 작동하지 않았습니다.
오늘 엔드포인트를 NextCloud에서 사용하는 것처럼 'http://192.168.1.1:9000’으로 변경했습니다. (NextCloud에서도 비슷한 문제가 있었습니다.) 마침내 파일이 S3에 업로드되는 것을 확인할 수 있었습니다. 하지만 여전히 Discourse에서 이미지를 볼 수 없었습니다. 빈 이미지의 URL을 확인해 보니 ‘cdn.example.com/original/1x/…’ 형태였습니다. 즉, 설정에 추가한 S3 버킷 이름이 누락되어 있었습니다.
그래서 'S3 CDN URL’을 'https://cdn.example.com/my_bucket_name’으로 변경했습니다. 마침내 Discourse 토픽 편집 화면과 라이브 웹사이트 모두에서 이미지를 볼 수 있게 되었습니다.
작동하기는 했지만, 다른 웹사이트로 돌아가려던 참에 'S3 Backup Bucket’은 메인 업로드 버킷과 다른 버킷 이름이어야 한다는 것을 알게 되었습니다. ‘이미지뿐 아니라 S3에 업로드되는 모든 파일에 CDN URL 사용’ 옵션을 활성화하면 S3 백업은 어떻게 될까요? 백업 파일이 'https://cdn.example.com/backup_bucket’에 업로드되나요?
그래서 백업을 실행해 보았습니다. 예상대로 백업 오류 메시지가 나타났습니다.
현재로서는 제가 MinIO와/또는 Discourse를 잘못 설정한 것이 아니라면, 'S3 CDN URL’에 메인 업로드 버킷 이름과 백업 버킷 이름이 추가되어야 합리적이라고 생각합니다. 그러면 'https://cdn.example.com/my_bucket_name’에서 'https://cdn.example.com’으로 되돌아갈 수 있을 것입니다.
또한, 'S3 endpoint’로 내부 IP를 사용하는 것을 선호하지 않습니다. Nextcloud에도 같은 질문을 해 보았습니다. Discourse의 S3 모듈은 어떻게 작동하나요? 프록시 서버 레벨에서 할당해 둔 FQDN 대신 왜 전체 내부 IP + 포트를 입력해야 하는지 궁금합니다. FQDN을 사용하면 MinIO 서버 중 하나가 실패할 경우 트래픽을 리디렉션하는 데 도움이 됩니다. 현재 설정으로는 메인 백엔드 서버가 다운되면 읽기 작업은(CDN을 통해) 가능할지 모르지만, 쓰기 작업은 불가능합니다.