さくらのレンタルサーバーでホストをしながら、WordpressをSSL化をするとき、少し手間取ったのでメモを残しておきます。
問題
さくらのレンタルサーバーでSSLを有効にしたが、https://でサイトにアクセスするとブラウザでエラーが表示されて、サイトが閲覧できなかった。
利用サービスは「さくらのSSL」で、Rapid SSLを使用。なお、さくらのSSL経由で認証局への手配やら、暗号鍵のサーバーインストールは正常に完了している。
原因
さくらのレンタルサーバーはSSL通信をする際、さくらのサーバーからリダイレクトをかけていた。
参照:さくらレンタルサーバーのサポートページ
「さくらのレンタルサーバ」にて提供しているウェブサーバApacheは、 80番ポートを使用する(HTTP)ものと、 443番ポートを使用する(HTTPS)ものとの 2種類に分けられます。 また、後者についてはプロクシとして動作します。 一般的に、前者は「http://」、後者は「https://」という形式でアクセスしますが、 同じディレクトリへのアクセスであっても、その際に呼び出されるウェブサーバ が異なると、 CGIプログラムやウェブサーバが.htaccessなどのファイルを読み込む際、挙動に違いが生じます。 例えば、HTTPとしてアクセスした場合はお手元のコンピュータが、 HTTPSとしてアクセスした場合は サーバそのものがアクセス元となります。 このため、SSLのみのアクセス許可(HTTPアクセスの制限)や、mod_rewriteによるURLの書き換えはできません。
引用元:https://help.sakura.ad.jp/app/answers/detail/a_id/2325
解決方法
さくらのレンタルサーバーでSSL通信をするときに、サーバーからのリダイレクトで処理することを認識させる設定を.htaccessに記述する必要があった。
参考:さくらのレンタルサーバでHTTPS(SNI SSL)な独自ドメインのWordpressサイトを構築する際の注意点
設定の引用
※環境ごとの設定は適宜変更してください。
まず、Wordpress設置時に追加する(パーマリンク設定時に生成される).htaccessの先頭に、以下の設定を追加します。
.htaccess<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$ RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] </IfModule>次に、wp-config.phpの先頭に以下の内容を追加します。
wp-config.phpif( 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'; }引用元:http://qiita.com/tabimoba/items/64ef60412abe7ad6f0ac
その後
上記設定でhttps://のURLが問題なく閲覧できるようになりました。一方で、サーバー側の負荷が増えたようで、これまで1.0秒以下のレスポンスタイムだったが、1.1~1.2秒レスポンスにかかるようになってしまいました。リダイレクトはさくらのレンタルサーバーの設定上、どうしようもないので、アクセスが増えて来たらリダイレクトのないサービスに移行する必要が出てくると考えています。