SNI SSL+WordPressの設定
(さくらインターネット)
GoogleがSSLを評価基準にするとアナウンスされて、サーバ各社さんもSSL対応を強化してきました。弊社が使っています"さくらインターネット"のサーバにも、2015年に入りSNI SSL対応になりました。この事で、今までより特にコスト面で容易にSSLに対応する事ができるようになりました。(※:mod_rewriteが使えなくなったので現在は使用していません)
ただ、一部のサイトでは、さくらインターネットのサーバのSNI SSLで、WordPressを使用する場合、「wwwアリの設定ができない」、と書かれていましたので、実際には、そうではなく、wwwアリもナシも設定できましたので、こちらで簡単ですが、まとめました。
「さくらのレンタルサーバ」にて提供しているウェブサーバ (Apache) は、 80番ポートを使用するものと、443番ポートを使用するものとの 2種類に分けられます。 一般的に、80番ポートは「http://」、443番ポートは「https://」という形式でアクセスされ、 「https://」についてはプロクシとして動作します。 そのため、同じディレクトリへのアクセスであっても、その際に呼び出されるウェブサーバ が異なると、 CGIプログラムやウェブサーバが.htaccessなどのファイルを読み込む際、挙動に違いが生じます。 例えば、HTTPとしてアクセスした場合はお手元のコンピュータが、 HTTPSとしてアクセスした場合はサーバそのものがアクセス元となります。 このため、SSLのみのアクセス許可(HTTPアクセスの制限)や、mod_rewriteによるURLの書き換えはできません。
(flow)wordpressがインストール済みで、さくらインターネットでのSSL設定は完了しいてると想定しました。
- wordpress管理画面→設定→WordPress アドレス (URL)とサイトアドレス (URL)のhttpをhttpsに変更する。
- wp-config.phpに、
if( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) { $_SERVER['HTTPS'] = 'on'; $_ENV['HTTPS'] = 'on'; $_SERVER['HTTP_HOST'] = 'www.example.com'; $_SERVER['SERVER_NAME'] = 'www.example.com'; $_ENV['HTTP_HOST'] = 'www.example.com'; $_ENV['SERVER_NAME'] = 'www.example.com'; }
といった記述を追加する。弊社は上部に記述追加しましたので、実際には、こんな感じになりました。※)MW WP Formを使用される場合、この記述が必須です。
<?php
// プロクシでIPが入るとSSLアクセス状態をセットする2015_10
if( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) {
$_SERVER['HTTPS'] = 'on';
$_ENV['HTTPS'] = 'on';
$_SERVER['HTTP_HOST'] = 'www.example.com';
$_SERVER['SERVER_NAME'] = 'www.example.com';
$_ENV['HTTP_HOST'] = 'www.example.com';
$_ENV['SERVER_NAME'] = 'www.example.com';
}
/**
* The base configurations of the WordPress.(この下、実際には続きます) - これできなくなっていました。))
つぎに、.htaccessに以下の記述を追加しました。この記述は、httpへのアクセスをhttpsにリダイレクトします。(なぜか、うまく行かないケースもあります)<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] </IfModule>
以上の流れ(flow)でWordPressは、問題なくSNI SSL環境で稼働できました。一部のサイトに書かれている様なwwwアリでは対応できない、という事もなく使えています。
記述内に、sakuraとありますように、さくらインターネット独自の何かがあるようにも感じます。
上記ですが、うまくいきませんでしたのでさくらインターネットに問合せましたら出来ないとの事でした。対応策を以下にまとめました。
- javascriptでhttp://をhttps://にリダイレクトしました。
<script type="text/javascript"> if(location.protocol == 'http:') { location.replace(location.href.replace(/http:/, 'https:')); } </script>
この記述をページの上部に記載しました。<head>タグの直下くらいに記載しました。
- canonicalでhttps://としました。
<link rel=”canonical” href="https://example.com/" />
これはトップページの例です。各ページのURLを記載する必要があります。 - サイト内リンクをすべてhttps://に変更しました。
<a href="https://example.com/">HOME</a>
とか、
<link href="https://example.com/css/common.css" rel="stylesheet" type="text/css" />
他にも画像リンクもhttps://に変更しました。
後は、sitemap.xmlをhttps://に変更して、searchconsoleもhttps://でアカウントを開設して、、、といったところです。
やってはいけないのは、metaタグのrefreshで、https://にリダイレクトさせるのはNGです。ページがループになってしまいます。
参考資料:さくらインターネットさんの回答-----
SSL通信時にはプロキシサーバを経由してHTTP通信でウェブ
サーバへアクセスし、 ウェブサーバ側でHTTPS環境変数をonにするよう処理いたしております。 しかしながら、mod_
rewriteで書き換えを行うとHTTPS環境変数がリセットされてしまいoffになるため、 httpsから始まるURLへのリダイレクトはループが発生いたします。 その他の環境変数をご利用いただくことで解決できる可能性はござ
いますが、弊社では「URLの書き換えはできない」 ことをを前提としてサービスを提供いたしておりますため、 回避策の確認は行っておりません。 ----