↑タイトル長えwwwww
Cloudflare で SNI SSL をやりたくなって、需要あるかなと思ってのメモ。
(MSIE [1-6]\.|MSIE [78]\.\d\; Windows NT 5\.|Android.*(Mobile)?\ [0-2]\.)
(MSIE [1-6]\.|MSIE [78]\.\d\; Windows NT 5\.|UP\.Browser/|DoCoMo/\d\.|SoftBank/\d\.|Android.*(Mobile)?\ [0-2]\.)
ガラケーって基本的に SNI の SSL をサポートされていないからな。
(MSIE [1-6]\.|MSIE [78]\.\d\; Windows NT 5\.|UP\.Browser/|DoCoMo/\d\.|SoftBank/\d\.|Android.*(Mobile)?\ [0-2]\.|bot|Bot|Y!J\-|Crawler|Baidu|Yeti|Slurp)
基本的な bot・クローラーに対してだけの対処。
SNI 非対応ブラウザを考えて、検索結果は普通に HTTP だけど SNI 対応ブラウザだけ HTTPS させたい場合に。
逆に bot 類のを取れば検索結果は HTTPS だし、若干検索順位で優位だけど、SNI 非対応ブラウザで1回警告が出る(スクショ)からな。。。
Google や Yahoo! JAPAN(Google と同じだが一応)、Yahoo! USA、bing(bingbot って名前だから bot で弾ける)、そのほかメジャーなキーワードで弾ければいいかな程度で。
Cloudflare Flexible じゃない(VPSなど、サーバー側で SSL が使える)場合。
# HTTP(S) Stuff
# Redirect all users except doesn't support modern browser, nor Japan cell-phone to HTTPS
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_USER_AGENT} !(MSIE [1-6]\.|MSIE [78]\.\d\; Windows NT 5\.|UP\.Browser/|DoCoMo/\d\.|SoftBank/\d\.|Android.*(Mobile)?\ [0-2]\.)
RewriteRule (.*) https://%{HTTP_HOST}/$1 [L]
- 既存の web.config があればそれにくっつける形で。
- XML ではなく、IIS マネージャーからやる場合はこの XML を参考に適宜。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP → HTTPS (if SNI OK)" stopProcessing="false">
<match url="^(.*)$" />
<conditions>
<add input="{HTTPS}" pattern="off" />
<add input="{HTTP_USER_AGENT}" pattern="(MSIE [1-6]\.|MSIE [78]\.\d\; Windows NT 5\.|Android.*(Mobile)?\ [0-2]\.)" negate="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
</rule>
<rule name="HTTPS → HTTP (if SNI NG)" stopProcessing="false">
<match url="^(.*)$" />
<conditions>
<add input="{HTTPS}" pattern="on" />
<add input="{HTTP_USER_AGENT}" pattern="(MSIE [1-6]\.|MSIE [78]\.\d\; Windows NT 5\.|Android.*(Mobile)?\ [0-2]\.)" negate="false" />
</conditions>
<action type="Redirect" url="http://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
レンタルサーバー+レン鯖SSLでお金を掛けたくない人向けだね。↑のやつだと使えない!
# HTTP(S) Stuff
# Redirect all users except doesn't support modern browser, nor Japan cell-phone to HTTPS
RewriteCond %{HTTP_CF_VISITOR} !^\{"scheme":"https"\}$
RewriteCond %{CF_VISITOR} !^\{"scheme":"https"\}$
RewriteCond %{HTTP_USER_AGENT} !(MSIE [1-6]\.|MSIE [78]\.\d\; Windows NT 5\.|UP\.Browser/|DoCoMo/\d\.|SoftBank/\d\.|Android.*(Mobile)?\ [0-2]\.)
RewriteRule (.*) https://%{HTTP_HOST}/$1 [L]
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Cloudflare SNI 1" stopProcessing="false">
<match url="^(.*)$" />
<conditions>
<add input="{HTTP_CF_VISITOR}" pattern="^\{"scheme":"https"\}$" negate="true" />
<add input="{CF_VISITOR}" pattern="^\{"scheme":"https"\}$" negate="true" />
<add input="{HTTP_USER_AGENT}" pattern="(MSIE [1-6]\.|MSIE [78]\.\d\; Windows NT 5\.|Android.*(Mobile)?\ [0-2]\.)" negate="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
</rule>
<rule name="Cloudflare SNI 2" stopProcessing="false">
<match url="^(.*)$" />
<conditions>
<add input="{HTTP_CF_VISITOR}" pattern="^\{"scheme":"https"\}$" negate="false" />
<add input="{CF_VISITOR}" pattern="^\{"scheme":"https"\}$" negate="false" />
<add input="{HTTP_USER_AGENT}" pattern="(MSIE [1-6]\.|MSIE [78]\.\d\; Windows NT 5\.|Android.*(Mobile)?\ [0-2]\.)" negate="false" />
</conditions>
<action type="Redirect" url="http://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
CF_VISITOR
かHTTP_CF_VISITOR
結局どっちかは未検証のためわからない。。- 分かったら誰かコメントお願いします←
冗長性を考えると{"scheme":"https"} は- 考えすぎかも。\{(.*)"scheme":((.*){0}| )"https"((.*){0}|;(.*))\}
になるのk・・・いやなんでもないw
- 先日Cloudflareが SNI の SSL を無料で提供されるという話を聞いて
- 以前 Invalid な ssl2000.cloudflare.com になっていたけど今度は Valid になっていた!
- 参考記事: CDNもSSL(TLS)もSPDYも全部無料、そうCloudFlareならね | Sorry for Team KILLing
- 『え、マジ!?やったー!じゃあ早速サイトを全部 SSL 化・・・したいところだが』
- 『古い IE は切り捨てられるとしても、Android 2.X(SNI 非対応)使っている人も少なくないんだよなー・・・』
- 『うーん、せめて SNI 対応ブラウザだけでも SSL アクセスさせられないか』
という経緯があってこのメモができたのだw