Apacheでhttpを止めずにhttpsに自動転送する
こんにちは。
WebサイトにSSLサーバ証明書を入れたけれどHTTPのアクセス(http://~)が残っている、というケースがあるかと思います。
Webサーバの機能を使ってHTTP(http://~)からHTTPS(https://~)へのリダイレクト(自動転送)させる機会がありましたので、その設定についてまとめてみたいと思います。
HTTPアクセスが残っているときの問題点
HTTPアクセスでの利用を許可していると以下のような不都合が出てくるかと思います。
- せっかくHTTPSアクセスできるのに、HTTPで利用できてしまう。
- HTTPとHTTPSとでURLが2パターン存在することになり、SEOやアクセス解析にとって良くない。
HTTPが使用している80番ポートを閉じてしまう(アクセスできなくする)方法もありますが、下記のような不都合が起こりえます。
- ブラウザからのURL直接入力時の入力ミス
- SSL化前の古いHTTPのリンクが残っている
- 自動リンクでHTTPが付与されて遷移してくる
- HTML上にHTTPの絶対パスが残っている
HTTPS化したあとはHTTPアクセスは不要になりますが、閉じてしまうことでたどり着けなくなる利用者も一部出てきてしまいます。
HTTPSへリダイレクトすることで、HTTPを残しながらも、HTTPSでWebサイトを利用してもらうことができます。
解決方法
Webサーバによるリダイレクト
今回はApache(Webサーバ)でリダイレクトを行います。設定した環境は下記になります。
- OS:Ubuntu
- Webサーバ:Apache 2.4
リダイレクトは単純にページ遷移させるのではなく、301リダイレクトを採用します。HTTPアクセスにはそのまま返答をせず、HTTPSアクセスとみなしてHTTPS用の返答をします。
リダイレクトは、Apacheのmod_rewriteというモジュールを使用します。mod_rewriteモジュールはアクセスしてきたURLを書き換えることができ、WordPressなどでも使用されています。
Apacheのconfファイルまたは.htaccessに設定することができます。どちらでも対応できますが、今回はconfファイルに下記を追記します。
RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
追記内容について
RewriteEngine・・・rewriteモジュールを有効にします
RewriteCond・・・条件を記述します
RewriteRule・・・上記条件に該当するアクセスに適用するルールを記述します
2行目
アクセスしてきたURLがHTTPS(https://)なら処理を終了します。
3行目
アクセスしてきたURLに関わらず、次のURLに301リダイレクトを行います。
HTTP_HOST、REQUEST_URIは、URLのhttp://以降をそのまま引き継ぐという意味です。R(rewrite)はリダイレクト指示とステータスコード、L(last)は処理終了を意味します。
アクセス確認
URLをhttp://でアクセスしてみると、301で返答があることがわかります。
今回はそのまま同じページに転送していますが、HTTPSへのブックマーク変更をお願いするページに転送したり、TOPページに強制転送するやり方も考えられます。利用者にどうしてほしいか、セキュリティ的にどうか、などで判断することになるかと思います。
HTTPSリンクの変更
HTTPSへのリダイレクトは、対処療法であり根本的な解決ではありません。
Webサイトのページ内にHTTPとHTTPSのリンクが混在していると、信頼性の低いWebサイトとみなされる場合もあります(Mixed content)。
※自ドメインだけでなく、他ドメインのHTTPリンクが含まれている場合も該当しますので、別途確認が必要になります。
HTTPアクセスはWebサーバのアクセスログを見ることでも判別できます。アクセスログには検索エンジンのボットや不正アクセスなど非利用者のアクセスも含まれますので、分けて考える必要があります。
まとめ
- HTTPアクセスをそのままにしていると運用上の不都合が出てきます。
- Webサーバの設定を変えることでHTTPSに301リダイレクトでき、安全に利用してもらえます。
- HTML上のリンクもhttps://~に変更する。
意図しないHTTPアクセスを除き、Webサイト側で解決できることであれば、ひとつずつ解消しておくほうが良いでしょう。以前のパンフレットや名刺など紙媒体にURLを記載済み場合も早めに対処しておくと良いでしょう。