CDP:Smart Custom Originパターン
提供:AWS-CloudDesignPattern
オリジンサーバへの意図しないアクセスをさせない手法
目次 |
解決したい課題
Apacheでコンテンツデリバリ用のオリジンサーバを構成している場合、ディレクトリへのアクセス時に最後のスラッシュを省略してしまうとオリジンサーバへリダイレクトされてしまう。
これにより、「オリジンサーバへのアクセスが増える」「オリジンサーバのURLが分かってしまう」といった問題が発生する。
クラウドでの解決/パターンの説明
ApacheのRewriteモジュールを使用することで、
- エッジサーバからのキャッシュリクエストで
- ディレクトリへのアクセス時にスラッシュが省略された場合
- 正しいキャッシュURLにリダイレクトを行う
ようなレスポンスを返す。
実装
AWSのコンテンツデリバリサービス「CloudFront」を使用している際のエッジサーバのアクセスは、"Amazon CloudFront"というUser-Agentが用いられる。
そこで、/etc/httpd/conf.d/rewrite.conf に
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^Amazon\ CloudFront$ RewriteRule ^/([^\.])+[^/]$ http://cached.example.com%{REQUEST_URI}/ [R=301]
という設定を行う。
これによりエッジサーバからのアクセス時にディレクトリパスへの / なしアクセスと思われるアクセスが行われた際に、オリジンサーバのURLを晒すことなく、キャッシュサーバのURLへリダイレクトが行われる。[関連ブログ 1]
構造
利点
- 広告等の媒体にURLなどが掲載される場合に、/ を省略して記載するケースが少なくない。
- URLを入力する際に / を打たないユーザも少なくない。
そういった場合に、オリジンサーバへの負荷をかけることがなくなる。
注意点
- ディレクトリか否かの判定をパス内にドットが含まれているかどうかで行っているため、http://cached.example.com/dir.with.dot/sub といったようなアクセスに対応ができない
- /なしディレクトリ名に対する引数付きアクセスに対応ができない http://cached.example.com/sub?param=foo