CDN

[AWS] CloudFrontのオリジンを動的に変更する – Lambda@Edge + Node.js

CloudFrontで参照しているオリジンをLambda@Edgeで変更してみます。

今回はhttp://foo.example.comでアクセスされたら、CloudFrontがオリジンhttp://example.com/foo/へリクエストする設定をします。

正直なところあまり需要は無いと思いますがw この設定が生きてくるのは大量に同様の設定をしなければならない時ですね。設定が必要なドメインが2〜3個であればCloudFront側でディストリビューションを必要なだけ作成する方がわかりやすいです。

というわけで先ほどの例の「foo」の部分はどのような文字列が来ても対応可能なよう設定していきます。
続きを読む

[AWS] CloudFrontからのリクエスト以外をオリジンで拒否する

このブログはCloudFrontからLightsailで作成したオリジンを参照する構成になっているのですが、最近オリジンに直接リクエストが来ることが増えました。間違えてオリジンのURLを返している可能性もあったのでログを解析してたのですが、大方の予想通りセキュリティホールを探っている物ばかりでした。

めちゃめちゃ気持ち悪い(´・ω・`) オリジンへのリクエストはCloudFrontからしか来ないと割り切って、80/443番へ直接来るリクエストはすべて拒否することにしました。

ここではApacheの設定を掲載しますが、同様の手法でnginxなど他のWebサーバーでも利用できると思います。

続きを読む

[Firebase] Cloud Functionsの実行結果をCDNにキャッシュする

Firebaseで動的に情報を出力する場合にCloudFunctionsを利用するわけですが、頻繁に情報が変化しない場合など実行結果を一定時間キャッシュしたくなりますよね。Firebaseでは非常に手軽に実装できます。

結論から言うと以下のようにCache-Controlヘッダを出力するだけ。以下で30秒間Firebaseが用意するCDNに実行結果がキャッシュされます。publicのつけ忘れにご注意を。

res
  .set("Cache-Control", "public, max-age=30")
  .send("キャッシュされるよ");

最初これを知らずにCDNを別途用意して、Firebase側をオリジンに設定しようとしていましたw 危ない危ないw
続きを読む