はじめに
Apacheがインストールされていることを前提として話を進めますので
良ければ以下のページの環境構築編の投稿をご覧ください。
なお、以降の説明はroot権限で作業することを前提とします。
設定ファイルを書き換えた後はサービスの再起動が必要になりますがそれも説明しません。
設定ファイル変更後、以下のコマンドを必ず実行してから確かめてください。
[root:~]$ systemctl restart httpd
80番ポートを443番ポートにリダイレクト
80番ポートを443番ポートにリダイレクトするとは、HTTP通信(80番ポート)でサーバに接続に来た場合に、自動的にHTTPS通信(443番ポート)に転送(切り替え)をしてあげる仕組みです。
これによってユーザがHTTP通信で接続しに来たとしても、自動的にHTTPS通信になり安全性が確保されます。
ちなみにですが、ポートの転送だけではなく、サーバをお引越しした際に移転先に転送するなんて言う使い方もされることもありあます。
なお、80番ポートを閉じてしまっては?と言う話もあるかもしれませんが、一連の投稿の中でLet’s Encryptを使用しており、証明書の更新の際などに80番ポートを開けおく必要があります。
そのため80番ポートを開けつつセキュリティを確保するためには443番ポートにリダイレクトする必要があります。
Apache起動時に設定ファイルのどこかに記述されていればいいのですが、あとで個別にリダイレクトの設定をいじる可能性もあるので/etc/httpd/conf.dフォルダ配下にvhost.confってファイルを作りました。
[root:~]$ vi /etc/httpd/conf.d/vhost.conf
このファイルの中に以下を記述してください。
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
RewriteEngine On | mod_rewrite モジュールを有効化 |
RewriteCond %{HTTPS} off | リクエストが HTTPS ではない場合にのみ RewriteRule を適用 |
RewriteRule | ルールに従ってURLを再構築 |
(.*) | リクエストのパス全体をキャプチャ |
https:// | http://をhttps://で始まるURLへ |
%{HTTP_HOST} | リクエストされたホスト名 |
%{REQUEST_URI} | リクエストされたパスの全体 |
[R=301] | リダイレクトをステータスコード301(恒久的リダイレクト)に |
[L] | Lastを意味し、それ以降のルールを処理しない ※これは複数のリダイレクトルールが設定されているときに活きてくる |
蛇足
ちなみにですが/etc/httpd/conf.dフォルダの配下に拡張子「conf」でファイルを作成しておけば、自動的に設定ファイルとして読み込まれます。
何故ならhttpd.confの中に以下の記述があるから
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
この設定を行った後にLet’s Encryptの証明書更新を試してみると、問題なく更新されることが確認される。
便利コマンド
Apacheでロードされているモジュールの一覧を知りたい
[root:~]$ httpd -M
実行結果
Loaded Modules:
core_module (static)
so_module (static)
:
cgid_module (shared)
http2_module (shared)
proxy_http2_module (shared)
コメント