船井総研デジタルのよもぎたです。
この記事では、AzureでUbuntu仮想マシンをデプロイする(Webサーバ用途)でデプロイした仮想マシンにApacheをインストールしてLet’s EncryptでHTTPSに対応させるところまでご紹介したいと思います。
なお、Let’s EncryptでHTTPSに対応させるには、ドメイン名が必要で、そのドメイン名が仮想マシンのグローバルIPアドレスに名前解決されるよう設定されていることが必要です。
ドメイン名の取得と設定は、お好みのレジストラで行ってください。
ApacheのインストールとHTTPS対応はこちらの記事をご覧ください。
Nginxのインストール
インストールするパッケージはnginx
です。
$ apt show nginx 2>/dev/null
Package: nginx
Version: 1.18.0-6ubuntu14.3
Priority: optional
Section: web
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Nginx Maintainers <pkg-nginx-maintainers@alioth-lists.debian.net>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 50.2 kB
Depends: nginx-core (<< 1.18.0-6ubuntu14.3.1~) | nginx-full (<< 1.18.0-6ubuntu14.3.1~) | nginx-light (<< 1.18.0-6ubuntu14.3.1~) | nginx-extras (<< 1.18.0-6ubuntu14.3.1~), nginx-core (>= 1.18.0-6ubuntu14.3) | nginx-full (>= 1.18.0-6ubuntu14.3) | nginx-light (>= 1.18.0-6ubuntu14.3) | nginx-extras (>= 1.18.0-6ubuntu14.3)
Breaks: libnginx-mod-http-lua (<< 1.18.0-6ubuntu5)
Homepage: https://nginx.net
Download-Size: 3882 B
APT-Manual-Installed: yes
APT-Sources: http://azure.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
Description: small, powerful, scalable web/proxy server
Nginx ("engine X") is a high-performance web and reverse proxy server
created by Igor Sysoev. It can be used both as a standalone web server
and as a proxy to reduce the load on back-end HTTP or mail servers.
.
This is a dependency package to install either nginx-core (by default),
nginx-full, nginx-light or nginx-extras.
早速インストールします。
$ sudo apt install -y nginx
インストールすると、TCP80番ポートをNginxがListenしていることが分かります。
$ sudo ss -tlnp | grep :80
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=2783,fd=6),("nginx",pid=2780,fd=6))
LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=2783,fd=7),("nginx",pid=2780,fd=7))
$ curl http://127.0.0.1/ 2>/dev/null | grep title
<title>Welcome to nginx!</title>
手元のPCのWebブラウザからアクセスしても、Nginxのデフォルトのページが表示されます。
HTTPSに対応させる
Let’s EncryptによるHTTPS対応のため、まずはnginxのサーバー名を設定して、Nginxのリロードをします。
$ grep server_name /etc/nginx/sites-available/default | grep -v '#'
server_name www.example.com;
$ sudo systemctl reload nginx
つづいてcertbotをインストールします。
$ sudo apt install -y certbot python3-certbot-nginx
インストールしたcertbotで証明書を取得します。途中でいくつか質問に答える必要があります。
$ sudo certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): username@exmaple.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
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
---snip---
ここでNginxがListenしているポートを確認すると、すでにTCP443番もListenしていることが確認できます。
$ sudo ss -tlnp | grep nginx
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=3483,fd=6),("nginx",pid=2780,fd=6))
LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=3483,fd=12),("nginx",pid=2780,fd=12))
LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=3483,fd=7),("nginx",pid=2780,fd=7))
LISTEN 0 511 [::]:443 [::]:* users:(("nginx",pid=3483,fd=11),("nginx",pid=2780,fd=11))
手元のPCのWebブラウザからHTTPSでアクセスしても、証明書エラーなど起きずにアクセスできます。
証明書の自動更新の設定
そこで、2か月ごと、奇数月の毎月1日午前7時に証明書を更新してNginxの設定を再読み込みするように設定します。
具体的には、cronに以下のように仕込みます。
0 7 1,3,5,7,9,11 * root /usr/bin/certbot renew --webroot-path /var/www/html/ --post-hook "/usr/bin/systemctl reload nginx" > /root/certbot-renew.execlog 2>&1
certbotの更新のテストは、次のようにして行えます。
$ sudo certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Simulating renewal of an existing certificate for tsyk.net
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/example.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
なお、Nginxのコンテンツは/var/www/html
に置かれています。
UbuntuにNginxをインストールしてLet’s EncryptでHTTPSに対応させるところまでご紹介しました。
AzureでUbuntu仮想マシンをデプロイする記事とUbuntuにApacheをインストールしてHTTPSに対応させる記事もよろしくお願いします。
最後までお読みいただきありがとうございました。