ApacheWebサーバのインストールとHTTPS対応まで

船井総研デジタルのよもぎたです。

この記事では、[AzureでUbuntu仮想マシンをデプロイする（Webサーバ用途）](https://qiita.com/t_ymgt/items/0c473f73cfe4794a8036)でデプロイした仮想マシンにApacheをインストールしてLet’s EncryptでHTTPSに対応させるところまでご紹介したいと思います。

なお、Let’s EncryptでHTTPSに対応させるには、ドメイン名が必要で、そのドメイン名が仮想マシンのグローバルIPアドレスに名前解決されるよう設定されていることが必要です。
ドメイン名の取得と設定は、お好みのレジストラで行ってください。

NginxのインストールとHTTPS対応は[こちらの投稿](https://qiita.com/t_ymgt/items/fca75992e0e311a29f98)をご覧ください。

インストールするパッケージは``apache2``です。
```bash
$ 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.
```

早速インストールします。
```bash
$ sudo apt install -y apache2
```

インストールが完了すると、すでにApacheが起動していることが分かります。
```bash
$ 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からアクセスしても、デフォルトページが返されることが分かります。
```bash
$ curl http://xx.xx.xx.xx/ 2>/dev/null | grep title
    <title>Apache2 Ubuntu Default Page: It works</title>
```

Let's encryptで証明書を取得するため、certbotをインストールします。
```bash
$ sudo apt install -y certbot python3-certbot-apache
```

インストールしたcertbotで、証明書を取得します。途中いくつか質問に答える必要があります。
```bash
$ 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を再起動します。
```bash
$ sudo systemctl restart apache2
```

ApacheがTCP443番ポートもListenしていることを確認します。
```bash
$ 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>
```

手元のPCからWebブラウザでアクセスしてみます。
![スクリーンショット 2023-01-09 165952.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822136/61656044-5fd4-44d4-d7b4-7d41881652f9.png)

無事アクセスできることが確認できました。

SSL/TLSの証明書も確認してみます。
![スクリーンショット 2023-01-09 170235.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822136/27745641-0dd2-4a92-eb5e-be14e9dd941e.png)

証明書の有効期限が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仮想マシンをデプロイする記事](https://qiita.com/t_ymgt/items/0c473f73cfe4794a8036)と[UbuntuにNginxをインストールしてHTTPSに対応させる記事](https://qiita.com/t_ymgt/items/fca75992e0e311a29f98)もよろしくお願いします。

最後までお読みいただきありがとうございました。