LoginSignup
3
2

More than 1 year has passed since last update.

さくらのオブジェクトストレージを独自のドメイン経由にする方法 - オブジェクト編 -

Last updated at Posted at 2021-09-10

TL;DR

2021/09現在で、独自ドメインを経由する方法は2通り(3つ目は2つ目の変わり種なので...)ありそうです。

  1. さくらのウェブアクセラレータを利用する
  2. 独自ドメインを終端できるリバースプロキシを建てる
  3. 独自ドメインを終端できる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等でゴリゴリ書くことになるかもしれませんが)、公開済みオブジェクト以外もアクセスできる(はず)。
→試していないです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2