For

2022.12.25

AlmaLinux9環境にNginxをインストールし、サブドメインをワイルドカードで指定してLet's EncryptでSSL対応する

AlmaLinux9にNginxをインストール

CentOSのサポート期間の問題でAlmaLinuxを使ってみることにしました。
パッケージマネージャはdnfで、以下がNginxのインストール方法です。
まずはNginxインストールの準備をしていきます。

bash_____none_____$ sudo dnf upgrade --refresh -y
$ sudo dnf install dnf-utils -y

# vimでnginx.repoを作成する(もしくはすでに存在すれば下記のように追記)
$ sudo vim /etc/yum.repos.d/nginx.repo


text_____/etc/yum.repos.d/nginx.repo_____[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true


続いてNginxをインストールします。

bash_____none_____$ sudo yum-config-manager --enable nginx-mainline
$ sudo dnf install nginx -y
$ nginx -v
nginx version: nginx/1.23.3

$ sudo systemctl start nginx
$ sudo systemctl enable nginx


併せてfirewallでhttpとhttpsが許可されているか確認します。

bash_____none_____$ sudo firewall-cmd --permanent --list-all
cockpit dhcpv6-client http https ssh

# もしhttpとhttpsが許可されていなかったら許可リストに追加してリロード
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --reload


Let's EncryptのSSL証明書インストール

次に、未定の複数サブドメインに対しても有効なSSL証明書を発行できるよう、サブドメインをワイルドカードで指定してインストールします。

bash_____none_____# certbotのインストール
$ sudo dnf install epel-release
$ sudo dnf install certbot python3-certbot-nginx

# 証明書インストール
# example.com の部分は適宜変更
$ certbot certonly --manual --preferred-challenges dns-01 -d example.com -d *.example.com


証明書インストールコマンドの補足

サブドメインに対してワイルドカードを指定する場合は、ドメインのTXTレコードに、指定された値をセットすることでDNSによる証明が必要となります。
そのときに使用するのが上記コマンドの次の部分です。
--preferred-challenges dns-01

すると以下のように表示されます。

bash_____none_____Please deploy a DNS TXT record under the name:

_acme-challenge.example.com.

with the following value:

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Before continuing, verify the TXT record has been deployed. Depending on the DNS provider, this may take some time, from a few seconds to multiple minutes. You can check if it has finished deploying with aid of online tools, such as the Google Admin Toolbox: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.example.com. Look for one or more bolded line(s) below the line ';ANSWER'. It should show the value(s) you've just added.



Nginxのconfに追記

SSL証明書のインストールが完了したら、confファイルの443ポートをlistenしているserverブロックに以下のように追記します。

text_____none_____server {
    listen 443 ssl;

    # ...(省略)

    # 追記箇所
    ssl_certificate     /etc/letsencrypt/live/sample.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/sample.com/privkey.pem;
}


httpsでアクセスしてみて問題なく表示できたら設定完了です。