Apache HTTP Server 強制的にSSL(https)接続 [常時SSL]

スポンサーリンク

公開するサイトで、強制的にSSL(https)接続するための方法です。

Apache HTTPサーバの場合

RewriteEngineを使って、URLの書き換えをして強制的にhttpsにします。

<IfModule mod_rewrite.c>
  # URL機能を有効にする。
  RewriteEngine On
  # RewriteCondの環境変数「HTTPS」の値で判定。
  # offの場合、httpsがoff(http通信)であれば。
  # onの場合、httpsがon(https通信)であれば。
  RewriteCond %{HTTPS} off
  # 「R=301」で永久的にリダイレクトをする。
  # デフォルトは、「302」の動作となり一時的なリダイレクトをする。
  # 「L」でこの行以降のルールは無視される。
  RewriteRule ^/?(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

ロードバランサーが手前にいる場合

ロードバランサーが手前にいる場合で、SSLアクセラレータを使っているときは、RewriteCondの設定を変更して、ヘッダー情報を貰って判断します。

<IfModule mod_rewrite.c>
  RewriteEngine On
  # リクエストヘッダー「X-Forwarded-Proto」の値がhttpsでなければ。
  RewriteCond %{HTTP:X-Forwarded-Proto} !https
  RewriteRule ^/?(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>