船井総研デジタルのよもぎたです。
この記事では、AzureでUbuntu仮想マシンをデプロイする(Webサーバ用途)でデプロイした仮想マシンにApacheをインストールしてLet’s EncryptでHTTPSに対応させるところまでご紹介したいと思います。
なお、Let’s EncryptでHTTPSに対応させるには、ドメイン名が必要で、そのドメイン名が仮想マシンのグローバルIPアドレスに名前解決されるよう設定されていることが必要です。
ドメイン名の取得と設定は、お好みのレジストラで行ってください。
NginxのインストールとHTTPS対応はこちらの投稿をご覧ください。
インストールするパッケージはapache2
です。
$ apt show apache2 2>/dev/null
Package: apache2
Version: 2.4.52-1ubuntu4.2
Priority: optional
Section: web
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Apache Maintainers <debian-apache@lists.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 546 kB
Provides: httpd, httpd-cgi
Pre-Depends: init-system-helpers (>= 1.54~)
Depends: apache2-bin (= 2.4.52-1ubuntu4.2), apache2-data (= 2.4.52-1ubuntu4.2), apache2-utils (= 2.4.52-1ubuntu4.2), lsb-base, mime-support, perl:any, procps
Recommends: ssl-cert
Suggests: apache2-doc, apache2-suexec-pristine | apache2-suexec-custom, www-browser, ufw
Conflicts: apache2.2-bin, apache2.2-common
Replaces: apache2.2-bin, apache2.2-common
Homepage: https://httpd.apache.org/
Task: lamp-server
Download-Size: 97.9 kB
APT-Sources: http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
Description: Apache HTTP Server
The Apache HTTP Server Project's goal is to build a secure, efficient and
extensible HTTP server as standards-compliant open source software. The
result has long been the number one web server on the Internet.
.
Installing this package results in a full installation, including the
configuration files, init scripts and support scripts.
早速インストールします。
$ sudo apt install -y apache2
インストールが完了すると、すでにApacheが起動していることが分かります。
$ sudo ss -tlnp | grep :80
LISTEN 0 511 *:80 *:* users:(("apache2",pid=3063,fd=4),("apache2",pid=3062,fd=4),("apache2",pid=3060,fd=4))
$ ps aux | grep apach[e]
root 3060 0.0 1.0 6768 4308 ? Ss 07:37 0:00 /usr/sbin/apache2 -k start
www-data 3062 0.0 0.9 752984 4116 ? Sl 07:37 0:00 /usr/sbin/apache2 -k start
www-data 3063 0.0 0.9 752984 4116 ? Sl 07:37 0:00 /usr/sbin/apache2 -k start
www-data 3186 0.0 0.0 3736 160 ? Ss 07:37 0:00 /usr/bin/htcacheclean -d 120 -p /var/cache/apache2/mod_cache_disk -l 300M -n
$ curl http://127.0.0.1/ 2>/dev/null | grep title
<title>Apache2 Ubuntu Default Page: It works</title>
手元のPCからアクセスしても、デフォルトページが返されることが分かります。
$ curl http://xx.xx.xx.xx/ 2>/dev/null | grep title
<title>Apache2 Ubuntu Default Page: It works</title>
Let's encryptで証明書を取得するため、certbotをインストールします。
$ sudo apt install -y certbot python3-certbot-apache
インストールしたcertbotで、証明書を取得します。途中いくつか質問に答える必要があります。
$ sudo certbot --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): <username>@example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y or N
---snip---
Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter 'c' to cancel): example.com
親切なことに、Apacheのサイトの設定ファイルも作成して有効にしてくれます。
設定を有効にするために、Apacheを再起動します。
$ sudo systemctl restart apache2
ApacheがTCP443番ポートもListenしていることを確認します。
$ sudo ss -tlnp | grep apache
LISTEN 0 511 *:80 *:* users:(("apache2",pid=4383,fd=4),("apache2",pid=4382,fd=4),("apache2",pid=4381,fd=4))
LISTEN 0 511 *:443 *:* users:(("apache2",pid=4383,fd=6),("apache2",pid=4382,fd=6),("apache2",pid=4381,fd=6))
$ curl https://example.com/ 2>/dev/null | grep title
<title>Apache2 Ubuntu Default Page: It works</title>
無事アクセスできることが確認できました。
証明書の有効期限が3か月なので、2か月ごとに更新することにしたいと思います。証明書の更新もcertbotで行えます。
cronに次の設定を仕込みます。今回は1月に証明書を発行したので、奇数月の1日午前7時ちょうどに更新処理とApacheのreloadを仕込みます。
0 7 1 1,3,5,7,9,11 * root /usr/bin/certbot renew --webroot-path /var/www/html/ --post-hook "/usr/bin/systemctl reload apache2" > /root/certbot-renew.execlog 2>&1
デフォルトではApacheのDocumentRootは/var/www/html
に設定されています。ここにコンテンツを置いてもいいですし、別のDocumentRootを設定してそちらにコンテンツを置いても構いません。DocumentRootを変更した場合は、上記のcronのコマンドも合わせて変更してください。
この記事ではApacheのインストールとLet’s EncryptによるHTTPS対応まで紹介いたしました。
AzureでUbuntu仮想マシンをデプロイする記事とUbuntuにNginxをインストールしてHTTPSに対応させる記事もよろしくお願いします。
最後までお読みいただきありがとうございました。