【apache】virtualhostを使用して複数ドメインのssl対応サイトを構築する方法

こんにちは。今回は、
apacheについて初心者エンジニア
に向けて、virtualhostを使用して複数ドメインのssl対応サイトを構築する方法について解説します。

virtualhostと複数ドメインの関連付け方法

まず、複数のドメインを運用するためには、apacheのvirtualhost機能を利用します。virtualhostは、1つのapacheサーバーで複数のドメインを管理する際に使用される機能であり、それぞれのドメインに対して個別の設定を行うことができます。

以下のような例で、virtualhostの設定を行います。

<virtualhost *:80>
    servername example.com
    documentroot /var/www/html/example
</virtualhost>

<virtualhost *:80>
    servername example2.com
    documentroot /var/www/html/example2
</virtualhost>

上記の例では、example.comとexample2.comという2つのドメインを設定しています。それぞれのドメインに対して、documentroot(ドキュメントのルートディレクトリ)を指定することができます。

ssl証明書の取得と設定手順

次に、複数のドメインにsslを導入するための手順を説明します。sslを導入することで、ウェブサイトの通信を暗号化し、セキュリティを向上させることができます。

  1. ssl証明書の取得
    まず、ssl証明書を取得する必要があります。無料で利用できるlet’s encryptを使用してssl証明書を取得する方法を説明します。以下のコマンドを使用して、certbotというツールをインストールします。
sudo apt-get update
sudo apt-get install certbot
  1. ssl証明書の取得と設定
    インストールが完了したら、以下のコマンドを使用してssl証明書を取得します。
sudo certbot certonly --webroot -w /var/www/html/example -d example.com -d www.example.com
sudo certbot certonly --webroot -w /var/www/html/example2 -d example2.com -d www.example2.com

上記の例では、example.comとexample2.comのドメインに対してssl証明書を取得しています。証明書は/var/www/html/exampleと/var/www/html/example2のディレクトリに保存されます。

  1. ssl証明書の設定
    ssl証明書を取得した後、apacheの設定を変更してsslを有効にします。以下の例では、証明書のパスと証明書のキーのパスを設定しています。
<virtualhost *:443>
    servername example.com
    documentroot /var/www/html/example

    sslengine on
    sslcertificatefile /etc/letsencrypt/live/example.com/fullchain.pem
    sslcertificatekeyfile /etc/letsencrypt/live/example.com/privkey.pem
</virtualhost>

<virtualhost *:443>
    servername example2.com
    documentroot /var/www/html/example2

    sslengine on
    sslcertificatefile /etc/letsencrypt/live/example2.com/fullchain.pem
    sslcertificatekeyfile /etc/letsencrypt/live/example2.com/privkey.pem
</virtualhost>

上記の例では、*:443でlistenを指定し、sslのポートを設定しています。また、sslengineをonにし、sslcertificatefileとsslcertificatekeyfileを正しいパスに設定することでsslを有効化します。

複数ドメインのhttpsリダイレクト設定方法

httpsへのリダイレクトを設定することで、ユーザーが常に安全な接続を使用するように促すことができます。

以下の例では、http://example.comをhttps://example.comにリダイレクトする設定方法を説明します

<virtualhost *:80>
    servername example.com
    documentroot /var/www/html/example

    rewriteengine on
    rewritecond %{https} off
    rewriterule ^(.*)$ https://%{http_host}%{request_uri} [r=301,l]
</virtualhost>

上記の例では、rewritecondを使用してhttpsがオフの場合にリクエストをリダイレクトし、 r=301を使用して永久リダイレクトを行います。

サブドメインごとの設定とssl対応

サブドメインごとに設定を行い、sslを対応させることもできます。

<virtualhost *:80>
    servername example.com
    documentroot /var/www/html/example
</virtualhost>

<virtualhost *:80>
    servername subdomain.example.com
    documentroot /var/www/html/subdomain
</virtualhost>

上記の例では、example.comとsubdomain.example.comという2つのドメインを設定しています。それぞれのドメインに対して、documentroot(ドキュメントのルートディレクトリ)を指定することができます。

同様にsslに対応させるためには、先ほどのssl証明書の取得と設定手順を行います。

サイトごとのカスタム設定とドメイン別のリソース管理

複数のドメインを運用する場合、それぞれのサイトにカスタム設定を行いたい場合があります。apacheでは、個別のvirtualhostブロック内でカスタム設定を行うことができます。

以下の例では、example.comとexample2.comそれぞれで異なるカスタム設定を行っています。

<virtualhost *:80>
    servername example.com
    documentroot /var/www/html/example

    # example.comのカスタム設定
    rewriteengine on
    rewriterule ^page/(.*)$ page.php?id=$1 [l]
</virtualhost>

<virtualhost *:80>
    servername example2.com
    documentroot /var/www/html/example2

    # example2.comのカスタム設定
    rewriteengine on
    rewriterule ^news/(.*)$ news.php?id=$1 [l]
</virtualhost>

上記の例では、example.comではurlのリライトを行っています。具体的には、/page/以下のurlをパラメータとしてphpスクリプトに渡しています。

また、example2.comでは、/news/以下のurlをパラメータとしてphpスクリプトに渡しています。

以上が、apacheを使用して複数ドメインのssl対応サイトを構築する方法です。virtualhostを利用することで、1つのサーバーで複数のドメインを運用することができます。let’s_encryptを使用してssl証明書を取得し、sslを有効化することで、ウェブサイトのセキュリティを向上させることができます。また、カスタム設定を行うことで、各ドメインごとに異なる機能を実現することも可能です。

参考資料:

 

【Apache】関連のまとめ

【Apache】関連のまとめ
【apache】virtualhost設定:複数ドメインのブログをホストしよう   【apache】仮想ホストのセキュリティ強化:ssl証明書を使用する方法   【apache】ディレクトリ別の仮想ホスト設定:複数のブログを管理   【ap...

 

オンラインスクールを講師として活用する!

【完全無料】使えるプログラミングスクール体験セミナー
【完全無料】使えるプログラミングスクール体験セミナー WEB制作の無料教材がここにきてどんどん増えてきてるので、使えるものをまとめようと思います。 TecAcademy(テックアカデミー) TechAcademyの無料体験 Samurai ...

 

0円でプログラミングを学ぶという選択

タイトルとURLをコピーしました