(正確にはこれから助けられるはず。。)
(開発で面倒&ケチってELBと別のサブドメイン使わないで、1ドメインでやってたから、
別ドメインだとJavascriptのXMLHttpRequestちゃんとchromeで動作しないの失念してた・・・・)
で、何がやりたいかというと、
1.静的なjsファイルはキャッシュしつつ
2.動的に動く部分はもちろんno-cache
3.上記を同じドメインで動かす
というのをやりたくなった訳だ。
当初、JSのキャッシュ部分のみcloudfrontで、動的部分はEC2で別のサブドメイン切って、、
みたいなので上記のエラーにはまり。
JS改修するのは恐らく大変なので。
じゃ別ドメインじゃなくて同じだったらイケるやん?と。
Cloudfrontが動的スクリプトもサポートしたって言うし。
というのが前段。
じゃ、CloudFrontの設定をやってみよー
まずCloudFrontのDistributionを作成
- methodはDoenload
- Origin SettingsやBehavior Settingsは、デフォルトをどうするかで貴方のお気に召すままに。
俺は当初、S3のバケットに置いたJSをキャッシュさせるつもりだったのでその設定で。 - 作成
作成したCloudfrontを選択して、Distribution Settingsを選択して
- Origins:Create Origin を押下
平たくいうと、ファイルの呼び出し元だねー - 追加したいキャッシュ元を入れる。
(S3 bucket or ELB or Other(別ドメイン、AWS以外でもいけるようだけど試してない)) - Behaviors:Create Behaviors を押下
こっちは、Requestされたファイルに対しての適応条件って感じ。
パターン数の数だけ書いて、どれにもマッチしなければdefaultが適応されますね。
フィルタみたいな感じだねー
以下は動的に動かしたかった場合の例 - Path Patarn : Request URIがこの条件に一致する場合に、この動作をしますよと。
お試して
*.php
/hoge
/fuge
とした。 - Object Caching:Customize
- Mnimum TTL : 0
- Foward Cookies:None
- Whitelist Cookies:ブランク
- Forward Query Stgings : 動作スクリプトがQuery Stgings 使うのかどっちかでお好みで
今回の自分の例では、必要/不必要 2パターンだったので切り分けてみた。 - Restict Viewer Access:アクセスに制限を掛けますかと。今回は割愛
他設定、適切にヘッダ等設定されていないとcacheされるよ!
今回はnginxとphp-fpmでの例
不要なの有ったら教えて欲しいっす・・・
- php.ini
- session.cache_limiter = nocache
session.cache_expire = 0 - ヘッダ追加
Nginx の HttpHeadersMoreModule を使うと、mod_expiresみたいな事できるみたいだけど
今回は時間ないのでスルー…ちゃんと調べたい。
ので、phpファイルででheader()で。 - header("Cache-Control: no-cache,max-age=0,s-max-age=0");
- If-Modeified-Sinceの設定もあるが、nginxはデフォルトでexpiresだったのでスルー
確認
で、暫く待ちましてDeployedになったならば、動的にしたファイルにアクセスしてみる。
とりあえず phpで
echo date('Ymd H:i:s');
echo date('Ymd H:i:s');
で、都度更新されてるか確認。
問題なければ時間が毎秒更新、アクセスログにも”Amazon CloudFront”からのアクセスログが残るはず。
という事で、これで同一ドメインで
静的ファイルはCloudFrontにキャッシュしつつ、動的に動かす必要がある部分はEC2に処理させつつってのが比較的手間もかからず、負荷にも強そうな感じでできそうです。
良かった良かった。っていうかCloudfront強力だなぁ。好きなサービス上げろって言われたら今はCloudfrontあげちゃうかも。
後はSSLに対応してくれたらなぁ。。
さて、これを元に構成図書きなおさなきゃ。。。
0 件のコメント:
コメントを投稿