cloudfrontでフューチャーフォン判定をする

CloudFrontで独自のSSLを使用する場合、以下2つの選択が可能です。

  • SNI独自SSL
  • 専用IP独自SSL
    ※ デフォルトはSNI独自SSLです。

フィーチャーフォンをSSLでアクセスさせるようにするには、SNIに対応していないので、専用IP独自SSLを選択する必要があります。

対象のCloudFrontを選択し、[General]タブ⇒[Edit]から以下で変更できます。

専用IP独自SSLへ変更は簡単にできるのですが、月額$600も費用がかかってしまいます。(従量課金で時間単位)

 

そこでフィーチャーフォンでは、httpでアクセスさせ、その他はhttpsでアクセスさせるようにしました。

 

Whitelist Headersに「CloudFront-Is-Mobile-Viewer」というヘッダーがあります。
こちらで対応できるのかと思いましたが、こちらはスマートフォンとフィーチャーフォンを同じMobileとして判定してしまいます。

そこで、Webサーバ側(Apache)の設定で対応しました。

CloudFrontのBehaviorの設定で以下「CloudFront-Forwarded-Proto」をWhitelist Headersに追加します。

Apacheの設定は以下のようにしました。

    RewriteEngine On
    ## PC https統一
    RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
    RewriteCond %{HTTP:CloudFront-Forwarded-Proto} !=https
    RewriteCond %{HTTP_USER_AGENT} !^(DoCoMo|KDDI|DDIPOKET|UP\.Browser|J-PHONE|Vodafone|SoftBank)
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    ## mobile 転送
    RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
    RewriteCond %{HTTP:CloudFront-Forwarded-Proto} !=https
    RewriteCond %{REQUEST_URI} !^(/mobile/?|/mobile/index.html)$
    RewriteCond %{REQUEST_FILENAME} !^(.*)\.(css|gif|png|jpg|jpeg|js)$ [NC]
    RewriteCond %{HTTP_USER_AGENT} ^(DoCoMo|KDDI|DDIPOKET|UP\.Browser|J-PHONE|Vodafone|SoftBank)
    RewriteRule (.*) http://%{HTTP_HOST}/mobile/index.html [R=301,L]

これで、以下の挙動になります。

▼フィーチャーフォンでアクセス

https: アクセス不可
http: すべて/mobile/index.htmlにリダイレクト

▼フィーチャーフォン以外でのアクセス

https: リクエスト通りにアクセス
http: httpsにリダイレクト