さくらのレンタルサーバーで常時SSL/TLSを設定する


さくらのレンタルサーバーでは以下の特殊な事情により、SSL/TLSの常時化に一工夫必要になります。

仕様

  • httpsのアクセスであっても、%{SERVER_PORT} に 443ではなく80が設定される。
  • httpsのアクセスであっても、%{SERVER_HTTPS} は空。
  • $_ENV['HTTPS'] に httpsのアクセスの場合は"on"が設定されるが、リライトされたものは、空になってしまう。
  • httpsのアクセスの場合、%{HTTP:X-Sakura-Forwarded-For} に クライアントのIPアドレスが設定される。

a-blog cmsでの常時SSL/TLS対応

以上の仕様により、通常の方法では常時SSL/TLSが対応できません。(リダイレクトループが発生してしまう)

そこで以下の対応を行います。

.htaccessを修正

htaccessに以下のリダイレクト処理を追記します。


## 追加
RewriteCond %{ENV:HTTPS} !^on$
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]

## 変更
# RewriteRule ((\.(html|htm|php|xml|txt|js|json|css|yaml|csv))|/)$ index.php [L] # 変更前
RewriteRule ((\.(html|htm|php|xml|txt|js|json|css|yaml|csv))|/)$ acms.php [L] #変更後

%{ENV:HTTPS} が "on" でなく、%{HTTP:X-Sakura-Forwarded-For} が 空の場合に、httpsからのアクセスでないと判定できるので、httpsにリダイレクトします。

acms.php の作成と編集

以下のコードをacms.phpファイルを作成し編集します。

<?php

if ( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) {
    $_SERVER['HTTPS'] = 'on';
    $_ENV['HTTPS'] = 'on';
}
require 'index.php';

これで、a-blog cmsの内部的にもhttpsのリクエストが判別できるようになります。

wwwありのドメインの場合

wwwありのドメインで運用する場合さらに注意が必要です。(wwwなしのドメインの場合は関係ありません。)

さくらのコントロールパネルのドメイン設定で「マルチドメインとして使用する(推奨)」に設定をしている場合問題がおきます。


マルチドメインとして使用する(推奨)

マルチドメインとして使用する(推奨)


この場合、httpsでwwwありでアクセスをすると、内部的に wwwなしとして扱われてしまいます。その結果、a-blog cmsは404 Not Foundを返してしまいます。

例: https://www.example.com でアクセスすると、以下のような値がwwwなしになってしまう。

  • $_SERVER[‘HTTP_HOST’] -> example.com

対応策

対応策として以下のように、さくらのコントロールパネルで設定してください。

  1. wwwなしのドメインの設定を「wwwを付与せずマルチドメインとして使用する(上級者向け)」に設定
  2. wwwありのドメインを追加し、「マルチドメインとして使用する(推奨)」に設定
  3. wwwなし、wwwありの設定とも「SNI SSLを利用する」にチェックをつける

wwwなし

wwwなし

wwwあり

wwwあり

これで、httpsのアクセスでも wwwありのリクエストとして a-blog cmsが認識できるようになります。