【Apache】名前ベースVirtualHostで、複数のSSL Webサイトを開設する

1 VirtualHostとは?

VirtualHostとは、1台のコンピュータ上で2つ以上のWebサイトを扱う方法です。

VirtualHostには、次の2種類があります。

NAMEベース
利用するドメイン全てに同じIPアドレスを使用
 
IPベース
利用するドメインごとにIPアドレスを設定(1つのサーバ内に複数のIPアドレス割振)

本記事では、上のうち①の実現方法について示します。
自分の備忘録として記述したものを、公開するものです。

2 VirtualHostで複数のHTTPSサイトを開く

2.1 本記事前提

本記事で示す設定例は、下に示す環境下におけるものです。

Apache/2.4.51 (Red Hat Enterprise Linux)
Let's EncryptでSSL化済み、IPv6接続
Red Hat Enterprise Linux release 9.0 (Plow)

Let's Encrypt によるSSL化については、次のWebページをご参照いただければと思います。

完全無料のLet’s Encryptで自サイトをSSL化

2.2 設定ファイル構成の基本方針

VirtualHostの設定をどのファイルにしたら良いのかについては、
世の中考え方もあっていろいろあるようですので、本記事での方針を示したいと思います。

まず、はじめに。
ドメインのVirtualHost設定ファイルは、”httpd.conf”からincludeされるものとします。
これについては、もともとそうなっているので、何かを設定する必要はありません。

個別ドメインごとにVirtualHost設定ファイルを作成する

ドメインごとにVirtualHostディレクティブを記述する必要がありますので、
ドメイン別にVirtualHost設定ファイルを作成るようにします。

これによって、ドメインごとに設定の修正や削除を行う際、
他ドメインのサイトへの影響を考慮せずに済みます。

全ドメインに記述する設定は共通化して別ファイルに記述する

各ドメインのVirtualHostディレクティブ内に記述すべき設定には、
同一の内容も少なくありません。

それらの設定を運用中に変更する場合、
ドメインの数が多いと修正箇所が多くなり、手間が増えるだけでなく管理も煩雑になります。

そのような設定はあらかじめVirtualHost用の共通設定ファイルにまとめて記述し、
ドメイン別のVirtualHostM設定ファイルからincludeするようにすると良いでしょう。

2.3 VirtualHostの設定

VirtualHostでマルチドメインに設定するには、
次の2種類のファイルを変更したり、追加します。

ssl.conf
VirtualHostディレクティブによるドメイン設定ファイル

2.3.1 ssl.conf

まず、”/etc/httpd/conf.d/ssl.conf”ファイル中の、以下に示す行以降をすべて削除します。

##
## SSL Virtual Host Context
##
#####ここ(”<VirtualHost>”)から、”</VirtualHost>”までのすべてを削除#####

そして、以下を追記します。

NameVirtualHost *:443

    【備考: NameVirtualHost】
    NameVirtualHostディレクティブは、 名前ベースの仮想ホストの設定を行ないたい場合に指定するパラメータとなり、
    上記の設定の場合、HTTPS(443ポート)で来たものはすべてVirtualHostを見よ
    という意味になります。

大量の行を削除するので、不安になるかと思います。
削除するのはひとつの”VirtualHostディレクティブ”だけであり、
コメントを除けば意味ある設定行はそう多くありません。
それらの設定を無くせないのであれば、VirtualHost設定ファイル中に移動することが可能です。

2.3.2 VirtualHostディレクティブによるドメイン設定ファイル

/etc/httpd/conf.d”の下に、
ドメインごとに、VirtualHostディレクティブのファイルを作成します。

ファイル名ベースは何であってもよいのですが、
ファイル名拡張子(POSIX系ではそう言わなかったと思いますが、Windowsにならって)は
.conf”である必要があります

ファイル内容は、たとえばドメインの一つが”hoge.com”でるとした場合、 VirtualHostディレクティブは下に示すように記述します。

<virtualhost *:443>
DocumentRoot   "/home/www/public_html"
ServerName        hoge.com:443
 
SSLEngine   on
SSLProtocol   all -SSLv2 -SSLv3 -TLSv1
SSLCertificateFile           /etc/letsencrypt/live/hoge.com/cert.pem
SSLCertificateKeyFile     /etc/letsencrypt/live/hoge.com/privkey.pem
SSLCertificateChainFile  /etc/letsencrypt/live/hoge.com/fullchain.pem
 
<Directory "/home/www/Public_html/">
~必要に応じて~
</Directory>
</virtualhost>

設定は必須ではありませんが、ログ出力についても示します。

全てのドメインのアクセスログが1つのログファイルに出力されるよりは、
ドメイン毎に出力された方が何かと便利です。

先に示したVirtualHost設定の中に、次のようにログ出力の設定を追記します。

ErrorLog       logs/hoge.com-error_log
CustomLog   logs/hoge.com-access_log common

なお、ログのフォーマットには、次のものがデフォルトで利用できます。

common
combined
combinedio
referer
agent

Apacheのインストール方法によっては、refereragentが定義されていない場合があります。

2.3.3 設定の反映

設定ファイルの編集が完了したら、Apacheを再起動します。

# systemctl restart httpd

以上

HTMLだと、
思うように編集することは難しく、やろうすればとっても時間が掛かります。
ですので、本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。

役に立てていただければ、うれしく思います。

このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元著者名は明らかにしてください

なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。

お問い合わせ