さくらのレンタルサーバーでSSL化対応(http→https)する際に注意点と対処法

さくらインターネットでも無料SSL証明書「Let’s Encrypt」が利用できるようになり、使い勝手がよくなってきているサーバーですが、WordpressをSSL化対応(http→https)する際に注意すべき点があるのでまとめてみました。
さくらのレンタルサーバーのHTTPS接続の仕様について
さくらのレンタルサーバーは、リバースプロキシによるHTTPS接続になっているため、SSL化することで他のサーバーと挙動が違ってきます。
「さくらのレンタルサーバ」にて提供しているウェブサーバ (Apache) は、
80番ポートを使用するものと、443番ポートを使用するものとの 2種類に分けられます。
一般的に、80番ポートは「http://」、443番ポートは「https://」という形式でアクセスされ、
「https://」についてはプロクシとして動作します。
そのため、同じディレクトリへのアクセスであっても、その際に呼び出されるウェブサーバ が異なると、
CGIプログラムやウェブサーバが.htaccessなどのファイルを読み込む際、挙動に違いが生じます。
例えば、HTTPとしてアクセスした場合はお手元のコンピュータが、
HTTPSとしてアクセスした場合はサーバそのものがアクセス元となります。
引用:SSL利用時の注意点
リバースプロキシによるHTTPS接続の影響
通常であれば、httpsに変更してWEBアクセスすると、httpsとしてプログラムが動作しますが、リバースプロキシがあることで、実際に動作するサーバーはhttpsでWEBアクセスしてもhttpとして動作してしまいます。
.htaccessでRewriteCond %{HTTPS}で書かれている場合や、PHPの「$_SERVER['HTTPS']」で書かれているプログラムはhttpsにしてもfalseが返ってしまい判定が正常にできません。
なので、httpsにドメインを統一しようとした時、httpからhttpsにリダイレクトを使用とした場合、無限ループが発生する場合があります。
[ads]
対処方法
.htaccessの修正
.htaccessファイルを修正します。下記の記述は、httpでアクセスされた場合httpsにリダイレクトさせる記述になります。
RewriteEngine On
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
※「RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$」はさくらのレンタルサーバー独自な記述です。これが無いと無限ループになります。
共通プログラムに追加修正
次に共通処理部分に下記を追加いします。
if( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) {
// ↓ご自身のドメインに書き換え
$_host = 'www.example.com';
$_SERVER['HTTPS'] = 'on';
$_ENV['HTTPS'] = 'on';
$_SERVER['HTTP_HOST'] = $_host;
$_SERVER['SERVER_NAME'] = $_host;
$_ENV['HTTP_HOST'] = $_host;
$_ENV['SERVER_NAME'] = $_host;
}
Wordpressの場合、設定ファイルであるwp-config.phpの先頭行に記述すると良いです。
WordPressはさくらが提供しているプラグインを使おう
手っ取り早く設定を変更したい場合や、サーバー独自のプログラムを書きたくない場合は、さくらが提供しているプラグインを使いましょう。
詳細は下記にまとめています。WordPressの設定を変更するを参考にしてみてください。
[kanren postid="161"]
まとめ
さくらのレンタルサーバーは、他のレンタルサーバーと違ってちょっとクセがありますが、上記の設定で正常に動作させることができます。
コメント
コメントを残す