highlight js

2013年5月17日金曜日

CloudFront使ってみた

とある開発案件で、Javascript XMLHttpRequest、ではまってしまったのでCloudFrontで助けられたって話
(正確にはこれから助けられるはず。。)
(開発で面倒&ケチってELBと別のサブドメイン使わないで、1ドメインでやってたから、
 別ドメインだとJavascriptのXMLHttpRequestちゃんとchromeで動作しないの失念してた・・・・)

で、何がやりたいかというと、
 1.静的なjsファイルはキャッシュしつつ
 2.動的に動く部分はもちろんno-cache
 3.上記を同じドメインで動かす
というのをやりたくなった訳だ。


当初、JSのキャッシュ部分のみcloudfrontで、動的部分はEC2で別のサブドメイン切って、、
みたいなので上記のエラーにはまり。
JS改修するのは恐らく大変なので。
じゃ別ドメインじゃなくて同じだったらイケるやん?と。
Cloudfrontが動的スクリプトもサポートしたって言うし。

というのが前段。



じゃ、CloudFrontの設定をやってみよー




まずCloudFrontのDistributionを作成

  1. methodはDoenload
  2. Origin SettingsやBehavior Settingsは、デフォルトをどうするかで貴方のお気に召すままに。
    俺は当初、S3のバケットに置いたJSをキャッシュさせるつもりだったのでその設定で。
  3. 作成

作成したCloudfrontを選択して、Distribution Settingsを選択して

  1. Origins:Create Origin を押下
    平たくいうと、ファイルの呼び出し元だねー
    1. 追加したいキャッシュ元を入れる。
      (S3 bucket or ELB or Other(別ドメイン、AWS以外でもいけるようだけど試してない))
  2. Behaviors:Create Behaviors を押下
    こっちは、Requestされたファイルに対しての適応条件って感じ。
    パターン数の数だけ書いて、どれにもマッチしなければdefaultが適応されますね。
    フィルタみたいな感じだねー
    以下は動的に動かしたかった場合の例
    1. Path Patarn : Request URIがこの条件に一致する場合に、この動作をしますよと。
      お試して
      *.php
      /hoge
      /fuge
      とした。
    2. Object Caching:Customize
    3. Mnimum TTL : 0
    4. Foward Cookies:None
    5. Whitelist Cookies:ブランク
    6. Forward Query Stgings : 動作スクリプトがQuery Stgings 使うのかどっちかでお好みで
      今回の自分の例では、必要/不必要 2パターンだったので切り分けてみた。
    7. Restict Viewer Access:アクセスに制限を掛けますかと。今回は割愛


他設定、適切にヘッダ等設定されていないとcacheされるよ!
今回はnginxとphp-fpmでの例
不要なの有ったら教えて欲しいっす・・・

  1. php.ini
    1. session.cache_limiter = nocache
      session.cache_expire = 0
  2. ヘッダ追加
    Nginx の HttpHeadersMoreModule を使うと、mod_expiresみたいな事できるみたいだけど
    今回は時間ないのでスルー…ちゃんと調べたい。
    ので、phpファイルででheader()で。
    1. header("Cache-Control: no-cache,max-age=0,s-max-age=0");
  3. If-Modeified-Sinceの設定もあるが、nginxはデフォルトでexpiresだったのでスルー

確認

で、暫く待ちましてDeployedになったならば、動的にしたファイルにアクセスしてみる。
とりあえず phpで
 echo date('Ymd H:i:s');
で、都度更新されてるか確認。
問題なければ時間が毎秒更新、アクセスログにも”Amazon CloudFront”からのアクセスログが残るはず。



という事で、これで同一ドメインで
静的ファイルはCloudFrontにキャッシュしつつ、
動的に動かす必要がある部分はEC2に処理させつつってのが比較的手間もかからず、負荷にも強そうな感じでできそうです。

良かった良かった。っていうかCloudfront強力だなぁ。好きなサービス上げろって言われたら今はCloudfrontあげちゃうかも。
後はSSLに対応してくれたらなぁ。。



さて、これを元に構成図書きなおさなきゃ。。。

0 件のコメント:

コメントを投稿