このページはなに?: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