常時 SSL 接続を行いたいウェブサイトがあります。
ただ、ロードバランサーなどで、https -> http 変換で Web サーバーに来ている構成だったりします。
その時の解決方法です。
前提
- ロードバランサーで https -> http をしている
- ロードバランサーで http_x_forwarded_proto のヘッダーをきちんと追加している
Apache の .htaccess or Conf
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
番外編:さくらインターネットの場合
さくらインターネットのレンタルサーバープランで常時 SSL 接続する場合、実は、ロードバランサーみたいなものの配下にあるので、通常の .htaccess では動きません。
下記の設定が必要です。
RewriteEngine on
RewriteCond %{ENV:HTTPS} !^on$
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Nginx の Conf
nginx.conf の server{}
の中に下記を入れる。(Apache のバーチャルホスト的な設定ファイルの構成な人は、別の場所に保存されているかもなので気をつけてください。)
#### https Redirect Under Load Balancer
if ($http_x_forwarded_proto = 'http') {
return 301 https://$host$request_uri;
}
クレジット
この記事が役に立ったら、「 CMS は concrete5 が一番」と頭の中で10回唱えてください。
CMS は断然 concrete5で決まり。