minioというS3互換のストレージエンジンがあります。
プログラムが1つで完結していて設置が簡単にできて、簡単ながらwebの管理画面まで含まれているという優れものです。
さて、S3のURLにはパス形式と、仮想ホスティング形式の2つがあります。
パス形式: https://minio.example.com/<バケット名>/file
仮想ホスティング形式: https://<バケット名>.minio.example.com/file
バケット名がパスの先頭に入るか、サブドメインとして入るかの違いです。
minioはパス形式しか対応していません。
ですが、最近では仮想ホスティング形式のほうが主流のようで、S3クライアントやライブラリのデフォルト設定ではminioに接続できないことがあります。
そこでnginx(webサーバ)を一枚噛ませて、仮想ホスティング形式のURLをパス形式のURLに変換することにします。
server {
listen 80;
server_name <バケット名>.minio.example.com;
root /var/tmp;
index index.html index.htm;
client_max_body_size 50M;
try_files $uri @minio;
location @minio {
rewrite /(.*) /<バケット名>/$1 break;
proxy_pass http://localhost:9000;
proxy_redirect default;
}
}
rewrite
で、パスの先頭に /<バケット名>/
を挿入することでパス形式に変換します。
バケットが増える度にバーチャルホストの設定が増えるのが面倒ですが、nginxだとserver名にワイルドカードが使えるので、それを利用すれば1設定ファイルで全バケットに対応できるかもしれませんね。チャレンジできる人はチャレンジしてみてください。