LoginSignup
2
2

More than 5 years have passed since last update.

Smart Custom Originパターン拡張:ディレクトリアクセスに対する強制リダイレクトの例外条件を追加する

Last updated at Posted at 2015-01-23

通常、ディレクトリアクセス(末尾スラッシュ無しのアクセス)の場合には、
末尾にスラッシュを付けてリダイレクトされるが、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以外の時はリダイレクトする、とすることで実現します。

以下のような設定になります。

httpd.conf

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^Amazon\ CloudFront$
RewriteCond %{REQUEST_URI} !/tomcat-access(.*)$          ← ここを追加
RewriteRule ^/([^\.])+[^/]$ http://XXXXcloudfront.net%{REQUEST_URI}/ [R=301]

つまるところ、Apache(mod_rewriteモジュール)の基本的な設定の話、、、なのでした。。。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2