S3 CDN URL バケット名を含む? - MinIO

,

Nginx プロキシサーバーの背後で MinIO マルチサーバーインスタンスを実行しています。
MinIO の統合で問題が発生しており、本日、アップロードされた画像を表示するために「S3 CDN URL」を「cdn.example.com」ではなく「cdn.example.com/bucket_name」に設定する必要があることがわかりました。

これは私自身の MinIO の設定の問題である可能性がありますので、もう少し情報を提供します。
同じコンテンツに対して 2 台のサーバーで MinIO を実行しています。どちらも内部 IP (例: 192.168.1.1 および 192.168.1.2) にマッピングされています。API アクセスポートは 9000、コンソールアクセスポートは 9001 とします。(異なる IP とポートを使用していますが、説明のためです。)

最初に「S3 エンドポイント」で問題が発生しました。

https://cdn.example.com」をエンドポイントとして使用すると、エラーが繰り返し発生しました。コンソールアクセス (例: ‘s3.example.com’) も試しました。これは、コンソール用に Nginx プロキシサーバーレベルでトラフィックを分散するために使用する 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」はメインのアップロードバケットとは異なるバケット名にする必要があることがわかりました。「Use CDN URL for all the files uploaded to s3 instead of only for images」を有効にすると、S3 バックアップはどうなりますか? バックアップファイルは「https://cdn.example.com/backup_bucket」にアップロードされますか?

そのため、バックアップを実行しようとしました。予想どおり、バックアップのエラーメッセージが表示されました。

現時点では、MinIO および/または Discourse の設定ミスがない限り、「S3 CDN URL」にはメインのアップロードバケット名とバックアップバケット名を追加する必要があるのが理にかなっていると思います。そうすれば、「https://cdn.example.com/my_bucket_name」から「https://cdn.example.com」に戻ることができます。

さらに、内部 IP を「S3 エンドポイント」として使用したくありません。Nextcloud にも同じ質問をしました。Discourse の S3 モジュールはどのように機能しますか? プロキシサーバーレベルで割り当てた FQDN ではなく、完全な内部 IP + ポートを指定する必要があるのはなぜでしょうか? FQDN は、MinIO サーバーのいずれかが失敗した場合にトラフィックをリダイレクトするのに役立ちます。現在の設定では、メインのバックエンドサーバーがダウンした場合、読み取りは (CDN によって) 機能するかもしれませんが、書き込みアクションは機能しません。

私の設定ミスや、MinIO/AWS SDKとの非互換性が原因である可能性が高いです。ひとまず回避策で対応します。

パススタイルバケット(minio.example.com/bucketname)を使用しているようです。これは機能しません。MINIO_DOMAIN を設定する必要があります。これにより、仮想ホストスタイルバケット(bucketname.minio.example.com)が暗黙的に有効になります。

Core Settings | AIStor Object Store Documentation を参照してください。

迅速な回答ありがとうございます。

では、画像URLが「bucketname.cdn.example.com」でなかった理由を教えていただけますでしょうか。
CloudFrontのようなCDN URLを追加したからでしょうか?私のケースでは、CDN URLがない場合、画像ファイルのパスが http://bucket_name.192.168.1.1:9000/original/1x/...... のようになるのではないかと懸念しています。

もし、各サーバーのMinIOにFQDNを割り当て、エンドポイントとしていずれかのFQDNを使用する必要がある場合、マルチサーバーでの負荷分散は無意味になってしまいます。