ApacheでHTTPS対応サイトにサブドメインを使うときのVirtualHost設定方法覚書

投稿者: | 2024年5月4日

このページはなに?:ApacheでHTTPS対応サイトのサブドメインを設定した方法のメモ。サブドメインとは、例えば example.com を保有しているとき、sub.example.com のようなURLでアクセスできるようにすること。

まず前提として、利用中のDNSサービスにサブドメインのレコードを登録しておく必要がある。 ※お名前ドットコムの場合は、ログイン後に ネームサーバー>ドメインのDNS設定 と進み、「DNSレコード設定を利用する」から変更できる。

まずHTTPで設定

とりあえず、平文のHTMLでサブドメインを受け付けるように設定する。/etc/apache2/sites-available の中に、サブドメイン用の設定ファイルを作成する。

$ touch /etc/apache2/sites-available/subdomain.conf  # 設定ファイルの名前はご自由に

# 以下を追記
<VirtualHost *:80>
        DocumentRoot /var/www/html/subdomain  # サブドメインのドキュメントルート
        DirectoryIndex index.html
        ServerName subdomain.example.com
        ServerAdmin webmaster@localhost
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <Directory "/var/www/html/subdomain">
                AllowOverride All
                Options FollowSymLinks
        </Directory>
</VirtualHost>

作成したら、以下で有効化する。

sudo a2ensite subdomain.conf
sudo systemctl reload apache2

subdomain.exmaple.comにアクセスしてみて、サイトを表示できれば成功。この時点では「保護されていない通信」と注意が出る。

サブドメインのSSL対応

証明書の新規発行

1つの証明書に複数のサブドメインを登録できるやり方があるらしい。ただ、既に取得してある証明書をいったん削除してから新規発行するやり方だったので、操作をミスってサイトがダウンすると嫌のでやめた。

結局、サブドメイン用に新たな証明書を発行することにした。Let’s Encrypt を使用した。以下を参考に。

sudo certbot --apache certonly と1行打ったら、自動で作ってくれました。

$ sudo certbot --apache certonly
Saving debug log to /var/log/letsencrypt/letsencrypt.log

Which names would you like to activate HTTPS for?
We recommend selecting either all domains, or all domains in a VirtualHost/server block.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: powerflowmap.shikiblog.link
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Requesting a certificate for powerflowmap.shikiblog.link

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/powerflowmap.shikiblog.link/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/powerflowmap.shikiblog.link/privkey.pem
This certificate expires on 2024-08-01.
These files will be updated when the certificate renews.

NEXT STEPS:
- The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

VirtualHost の設定

/etc/apache2/sites-available/subdomain.conf にHTTPSの設定を追記し、全体として以下のようにする。

$ touch /etc/apache2/sites-available/subdomain.conf

<VirtualHost *:80>
        DocumentRoot /var/www/html/subdomain  # サブドメインのドキュメントルート
        DirectoryIndex index.html
        ServerName subdomain.example.com
        ServerAdmin webmaster@localhost
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <Directory "/var/www/html/subdomain">
                AllowOverride All
                Options FollowSymLinks
        </Directory>
</VirtualHost>

# 以下を追記する
<VirtualHost *:443>
        DocumentRoot /var/www/html/subdomain
        DirectoryIndex index.html
        ServerName subdomain.example.com
        ServerAdmin webmaster@localhost
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on

        SSLCertificateFile /etc/letsencrypt/live/subdomain.example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/subdomain.example.com/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/subdomain.example.com/chain.pem

        <Directory "/var/www/html/subdomain">
                AllowOverride All
                Options FollowSymLinks
        </Directory>
</VirtualHost>

最後に apache の reload を忘れずに行う。ブラウザで https://subdomain.example.com にアクセスし、表示できたら成功です。

sudo systemctl reload apache2

参考

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です