通常、ディレクトリアクセス(末尾スラッシュ無しのアクセス)の場合には、
末尾にスラッシュを付けてリダイレクトされるが、Defaultだとオリジン名がバレちゃうので、対策(Smart Custom Originパターン適用)が必要。
でも、全てのリクエストでこれをやると、ディレクトリアクセスが正常であるPathがあった場合、予期せぬリダイレクトがかかってしまうのでどうにかしたい!
という話です。
1.Smart Custom Originパターンとは
Cloudfrontに対して、ディレクトリアクセスをした場合、
オリジン(ここではApache想定)では、末尾にスラッシュをつけたURLでリダイレクトしろ!
という挙動をとります。
では、どこにリダイレクトすることになるのかというと、自分自身(=オリジン)のDNS名
になってしまいます。
つまり、
オリジンDNS名がばれてしまう
のです。
この課題への対応策がSmart Custom Originパターンです。CDPに認定されています。
mod_rewriteモジュールを使って、Cloudfront経由のアクセス、かつディレクトリアクセスだった場合は、CloudfrontのDNS名にリダイレクトさせるように、明示的な設定を入れてやることで対応しています。
2.全部リダイレクトさせたくないケースもある
ただ、サイトによってはリダイレクトさせたくないpathも混在するはずです。
Tomcat側で処理させるような場合です。
※Tomcat処理させるようなURLは、末尾にスラッシュがないURL(ディレクトリアクセス)になる
つまり、Tomcat連携させるPathだった場合のみリダイレクトさせない、という追加考慮が必要になります。
3.Smart Custom Originパターンを拡張する
拡張するといっても大それたことをするわけではありません。
mod_rewriteのRewriteCond
に条件追加してあげるだけです。
例えば、/tomcat-access
というPathへのアクセスだった場合だけリダイレクトさせないようにするには、
/tomcat-access
以外の時はリダイレクトする、とすることで実現します。
以下のような設定になります。
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^Amazon\ CloudFront$
RewriteCond %{REQUEST_URI} !/tomcat-access(.*)$ ← ここを追加
RewriteRule ^/([^\.])+[^/]$ http://XXXXcloudfront.net%{REQUEST_URI}/ [R=301]
つまるところ、Apache(mod_rewriteモジュール)の基本的な設定の話、、、なのでした。。。