これは さくらインターネット Advent Calendar 2019 の10日目の記事です
さくらインターネットでCDNサービス「ウェブアクセラレータ」の開発・運用をしている稲波です。
「 CDNサービスって何?」という部分の説明については、こちらの記事内では省略させていただきますので、そのあたりについてを確認されたい方は、上記サービスサイトや下記のさくナレ連載をご覧ください。
ウェブアクセラレータは、2016年10月に正式提供開始したCDNサービスです。*1今年で、3周年を迎えました!
ウェブアクセラレータは随時機能追加を行っており、今年は、6つの新機能をリリースしました!*2
本記事では、2019年にリリースした新機能を振り返り、その機能活用のレシピを書きました。
2019年にリリースした6つの新機能
各々の詳しい設定方法については、マニュアル をご覧ください。
1 . コントロールパネルでキャッシュ期間が設定できる機能
こちらは、先週リリースしたばかりの機能です。
今まで、ウェブアクセラレータのキャッシュ期間設定は、オリジンサーバ(お客様のWebサーバ)側でキャッシュ制御用のレスポンスヘッダを付与する設定をしていただく必要がありました。
が、この機能が追加されたことで、コントロールパネルより一括でキャッシュ期間を設定できるようになりました。*3
2. リクエストプロトコルの選択機能
リクエストプロトコルについて、今までの「http・httpsの両方を許可する」のほかに、「httpsのみ許可する」「httpsにリダイレクト」が追加になり、選択可能になりました。
オリジンサーバ側で設定することなく、お手軽にリダイレクトの設定などができるようになりました。
3. オリジンガード機能
ウェブアクセラレータを経由しないオリジンサーバへの直接アクセスをガードできる機能です。ウェブアクセラレータで発行するヘッダ(X-WebAccel-Guard)のトークン値に一致する場合のみアクセス許可する設定を、オリジンサーバに設定することで、悪意のあるアクセスからオリジンサーバを守ることができます。
オリジンガードトークンの更新準備の機能も先日追加されましたので、トークン値を定期的に変更する際にも、解除することなく切り替え可能です。
4. ワンタイムURL機能
指定した有効期限内にのみコンテンツを公開するための機能です。
オリジンサーバにて、レスポンスヘッダ(X-WebAccel-Secret)を使ってシークレットキーと、URLのクエリパラメータをつかって有効期限を設定することで、ウェブアクセラレータ経由で配信した際に期間限定配信(有効期限内にのみアクセス可能)ができます。
※ こちらは、オリジンガードトークン機能と併せてご利用ください(オリジンサーバに直接アクセスできるとシークレットキーが確認できてしまうため、ウェブアクセラレータからの接続のみ許可する必要があります)。
5. 操作ログが記録されるようになった
さくらのクラウドのイベントログ機能で、ウェブアクセラレータの操作ログも記録されるようになりました。ウェブアクセラレータの操作について、過去の履歴を確認できます。
6. Rangeリクエストをキャッシュできるようになった
Rangeヘッダ付きのリクエストがあったときに、キャッシュ対象の場合は、バックグラウンドでコンテンツ全体を取得しキャッシュできるようになりました。
キャッシュ済みのコンテンツについて、Rangeの指定範囲が異なるリクエストがあった場合にも、キャッシュ済みのコンテンツより配信ができるので、オリジンサーバへのリクエスト負荷が削減できます。
機能活用のレシピを考える
機能単体の設定方法については、マニュアル に記載していますが、参考として、機能を組み合わせてつかったりなどで、どう活用することができるのかについて書いてみました。紹介するアプローチ方法は、ごく一部ですので、ウェブアクセラレータ自体は自由に使っていただけます。
※ あくまでこういう活用方法もできますよという紹介で、推奨しているわけではないので、ご承知ください。
1. コントロールパネルでキャッシュ期間設定 × オリジンレスポンスにキャッシュ無効の設定 をしてみる
オリジンサーバ(お客様のWebサーバ)側でキャッシュ制御用のレスポンスヘッダを付与する場合の、配信フローは下記になります。キャッシュ対象にCache-Control: s-maxageを設定します。
オリジンのレスポンスヘッダにCache-Control: no-store などのキャッシュ無効の設定をしておくことで、その無効ヘッダが設定されたコンテンツは、コントロールパネルでのキャッシュ期間設定のキャッシュ対象外になります。キャッシュさせたくないパスや拡張子に無効設定しておくことで、その箇所はパススルー(ウェブアクセラレータをプロキシとして使う)させ、他は、キャッシュさせるという使い方も可能です。
※ この場合、キャッシュヒット率としては、あまり高くはならない可能性があるのでご注意ください。
という風にキャッシュさせない設定をすることで、それ以外の機能適用条件に合うすべての対象が、キャッシュ期間設定で一括で適用されているといった活用方法もできるのではないかと思います。
キャッシュさせる設定を付与するか、キャッシュさせない設定を付与するか、運用するサイトの都合上便利な方で対応いただけると思います(合わせ技も可能です)。
補足 : 特定のヘッダがある場合にno-storeを付与する nginx の設定については、過去に、
という記事を書きました。
こちらの記事自体は、認証ヘッダについて書きましたが、コントロールパネルからキャッシュ設定した場合は機能仕様としてキャッシュ対象となりません。
違うヘッダ、例えば Set-Cookie で似たようなことがしたい場合などがありましたら、参考にしてみてください。
2. ワンタイムURL × Rangeリクエストキャッシュ
ワンタイムURLでの配信においても、Rangeリクエストキャッシュが可能です。1コンテンツあたり1GiB以内であればキャッシュ可能なため、サイズが大きめのコンテンツでリクエスト範囲(再生開始位置など)が違う場合でも、ワンタイムURLで限定公開コンテンツのキャッシュ配信をお手軽に実現できます。
オリジンへの負荷が軽減できると思います。
※図では省略しましたが、上述の通りオリジンガードとの併用が必要です。
以上、新機能の振り返りと、機能活用のレシピでした。
最後まで読んでくださってありがとうございました!