さくらのクラウドでCDNを利用してみる

どうも、やまもとやまです。
各パブリッククラウドサービスでは、それぞれのCDNを利用可能かと思います。
例えば、AWSであればCloudFront、Google CloudであればCloud CDN、Microsoft AzureであればAzure Front Doorがそれにあたります。
また、Cloudflare等のように、CDN専用のサービスなんかもあります。

さて、さくらのクラウドにもCDNは用意されており(※正確には、さくらのクラウド内ではなく、さくらインターネットの提供する別サービス)、「ウェブアクセラレータ」という名前のサービスとなります。
というわけで、今回はウェブアクセラレータを試してみましょう。

サイトを作成する

さくらのクラウドにログイン後、ホーム画面のメニューから「さくらのウェブアクセラレータ」が選択できます。

yamamoto41-cdn01

早速クリックしてみます。

yamamoto41-cdn02

サイトの追加画面になりました。
独自ドメインもしくは webaccel.jp のサブドメインの形での利用ができるようです。
通常は独自ドメインを選択すれば良いですね。
というわけで必要情報を入力していきます。

オリジンサーバーの指定は、オリジンのドメイン名で指定することも、IPアドレスとホストヘッダで指定することも可能です。
「デフォルトのキャッシュ期間」という項目では、オリジンのレスポンスヘッダにキャッシュ期間の指定がない場合に、CDN側でデフォルトのキャッシュ期間を設定するかどうかを指定可能です。
オリジンがウェブサーバーの場合は標準では無効になっていますが、有効にすることで簡単にキャッシュ期間の設定が可能です。
ただし、動的コンテンツやクッキー等がある場合、意図せぬキャッシュが発生する可能性がありますので、注意して利用しましょう。
詳細はこちらのマニュアルもご参照ください。

また、デフォルトのキャッシュ期間が無効かつコンテンツ側でもキャッシュ期間を指定していない場合、CDNでのキャッシュがまったく行われませんので、同じく注意が必要です。

今回はお試しのため、デフォルトのキャッシュ期間を有効にしてみます。
各項目を入力したら、「保存」をクリックするとサイトが作成され、完了画面が表示されます。

yamamoto41-cdn03

追加完了画面では設定が表示されます。
またサイト作成時にCNAME先として、webaccel.jpのサブドメインが払い出されます。

サイトの有効化を行う

さて、サイトを追加した状態では、CDNは無効になっています。
有効化するにはドメイン所有権の確認が必要ですが、方法は2つあります。

  1. 対象サイトのレコードをCDNへ向ける
  2. 対象サイトのドメインでTXTレコードを設定する

利用前のWebサイトであれば1でも良いですが、現在利用中のWebサイトを切り替える場合は2での設定になるかと思います。
今回はお試しなので、1で設定してしまいましょう。

yamamoto41-cdn04

メニューの「サイト一覧」で先ほど作成したサイトを選択すると、「ステータス無効」が表示されています。
有効にするため、右上の「設定」ボタンをクリックします。

yamamoto41-cdn05

ドメイン所有権確認の内容が表示されます。
ALIASレコードと記載されていますが、CNAMEで大丈夫です。
また、試してみたところ、CNAMEの名前解決先のIPアドレスをAレコードで設定しても有効化可能でした(公式にはCNAMEまたはALIASとありますし、今後も可能かどうかは分からないので、あくまで参考情報となります)。
DNSサーバーで設定を行い、名前解決できるようになったら、「有効にする」ボタンをクリックすると有効化されます。

SSL証明書を設定してみる

ウェブアクセラレータではLet's EncryptのSSL証明書が利用可能です。
有効化後に設定できるようになりますので、試してみましょう。

yamamoto41-cdn06

「サイト一覧」の対象サイト(有効化済みマークになっていますね)から、SSL証明書タブを選択すると、SSL証明書の設定画面となります。
ここでは、Let's Encrypt利用か、持ち込みのSSL証明書のどちらかを選択可能です。
Let's Encryptの「自動更新を有効にする」をクリックすると、証明書が発行され、設定されます。

サイト表示を確認する

それではお待ちかね、サイト表示の確認です。
ブラウザで確認しても良いですが、ヘッダを見るためにcurlで確認してみましょう。
※結果は抜粋で、IPアドレス等一部マスクしています

$ curl --verbose https://test.example.com/

*   Trying xxx.xxx.xxx.xxx:443...
* Connected to test.example.com (xxx.xxx.xxx.xxx) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1

中略

* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=test.example.com
*  start date: Sep 14 10:37:26 2026 GMT
*  expire date: Dec 13 10:37:25 2026 GMT
*  subjectAltName: host "test.example.com" matched cert's "test.example.com"
*  issuer: C=US; O=Let's Encrypt; CN=YE2
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0

中略

> GET / HTTP/2
> Host: test.example.com
> user-agent: curl/7.76.1
> accept: */*
>

中略

< x-cache: MISS
<
webacc test

この結果から、以下が分かりますね。

  • HTTP/2を利用し、TLS1.3で通信している
  • Let's EncryptのSSL証明書が正常に発行され、設置されている
  • まだキャッシュがなく、オリジンにアクセスしている
  • コンテンツが正常に表示されている

では再度curlでアクセスしてみます。

$ curl --verbose https://test.example.com/

前略

< x-cache: HIT
<
webacc test

今回は無事キャッシュがヒットしました!
CDNとしてちゃんと機能しているようです。

そんなこんなで

さくらのクラウドのウェブアクセラレータで、CDNを簡単に試してみました。
詳細までは設定していませんが、とりあえずで利用するにはシンプルで分かりやすいです。
設定に悩むこともあまりなさそうでした。
ただし体感として、パスベースでオリジンを分ける等はできず細かい設定は苦手そうに思えたので、オブジェクトストレージと組み合わせるのが最良かもしれないですね。

それではまた!