TL;DR
2021/09現在で、独自ドメインを経由する方法は2通り(3つ目は2つ目の変わり種なので...)ありそうです。
- さくらのウェブアクセラレータを利用する
- 独自ドメインを終端できるリバースプロキシを建てる
- 独自ドメインを終端できるWebサーバを建てリダイレクトする
さくらのウェブアクセラレータを利用する場合
さくらのクラウドにログインして、https://secure.sakura.ad.jp/webaccel/#/regist にて独自ドメインを設定できます。
オリジン(ウェブアクセラレータの接続先)やオブジェクトストレージにアクセスするためのアクセスキー・シークレットキーが必要になるので、予めさくらのクラウド>オブジェクトストレージ
にて作成しておきましょう。
独自ドメインを終端できるリバースプロキシを建てる場合
どうしてもウェブアクセラレータを使いたくない(使えない)理由がある場合、独自ドメインを終端するnginx等のリバースプロキシを建てることで解決できます。
以下では、nginxを用いて独自ドメインでpublic read
なオブジェクトにアクセスする方法を示します。
オリジンとなるオブジェクトストレージのオブジェクトをpublic read
に設定し、nginxの設定ファイル(ここでは default.conf
という名前で作成しています)
server {
listen 443;
ssl on;
ssl_certificate ssl.mydomain.com.pem; # 独自ドメインの証明書
ssl_certificate_key ssl.mydomain.com.key; # 独自ドメインの証明書の秘密鍵
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass https://my-bucket.s3.isk01.sakurastorage.jp; # my-bucketは自分のバケット名
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
これを nginxサーバの/etc/nginx/conf.d/
以下に配置し、nginxサーバ内で
systemctl start nginx
を叩けば、独自ドメインで公開済みオブジェクトにアクセス可能です。
リバースプロキシ先の名前解決ができない場合は、必要に応じてdnsmasq
などをインストールして下さい。
手元のマシンで確認したい場合は、default.conf
があるディレクトリにて、
docker run --rm -p 80:80 -v $(pwd)/default.conf:/etc/nginx/conf.d/default.conf bradjonesllc/nginx-dnsmasq
を実行すれば、
curl localhost:80/公開済みオブジェクト名
という感じでアクセスし確かめることができます。
独自ドメインを終端できるWebサーバを建てリダイレクトする場合
前述のリバースプロキシしたものをリダイレクト方式に変えたものになります。
server {
listen 443;
ssl on;
ssl_certificate ssl.mydomain.com.pem; # 独自ドメインの証明書
ssl_certificate_key ssl.mydomain.com.key; # 独自ドメインの証明書の秘密鍵
server_name localhost;
return 301 https://my-bucket.s3.isk01.sakurastorage.jp$request_uri; # my-bucketは自分のバケット名
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
こちらはリダイレクトなので、dnsmasq
などは不要で
docker run --rm -p 80:80 -v $(pwd)/default.conf:/etc/nginx/conf.d/default.conf nginx
を実行すれば、
curl localhost:80/公開済みオブジェクト名
という感じでアクセスし確かめることができます。
もう少し頑張ると・・・
nginxにて、当該バケットへアクセス可能なアクセスキー・シークレットキーを設定すれば(lua等でゴリゴリ書くことになるかもしれませんが)、公開済みオブジェクト以外もアクセスできる(はず)。
→試していないです。