Web サイトに無料 SSL 証明書を導入:Linux の Nginx と Let's Encrypt(Certbot)で HTTPS サイトを公開する方法

9 分で読めます 7 回閲覧 0
目次

公開する Web サイトはすべて HTTPS で配信すべきで、Let's Encrypt の無料 SSL 証明書を使えば簡単に実現できます。このガイドでは、JUSTG のクラウドサーバーや専用サーバーで Nginx を使ってサイトを公開し、certbot で Let's Encrypt 証明書を発行し、自動更新を確認して HTTPS を強制する手順を説明します。コマンドは Debian/Ubuntu と CentOS/Rocky Linux/AlmaLinux の両方を記載しています。例のドメインは example.com、サーバー IP は 203.0.113.10 です。ご自身のものに置き換えてください。

ステップ1:ドメインを JUSTG サーバーに向ける(A/AAAA レコード)

ドメインのレジストラまたは DNS サービスで、ルートドメインと www の A レコードをサーバーの IPv4 に向けます。JUSTG のクラウドサーバーには無料の IPv6 もありますが、AAAA レコードはサーバーで IPv6 を設定し Nginx が待ち受けている場合のみ追加してください。Let's Encrypt はインターネット経由でドメインを検証するため、レコードが反映されてから証明書を申請します。

# A    example.com       -> 203.0.113.10
# A    www.example.com   -> 203.0.113.10
# AAAA example.com       -> 2001:db8::10   (optional, only if IPv6 is configured)

# check from the server (Debian/Ubuntu: apt install -y dnsutils, Rocky: dnf install -y bind-utils)
dig +short example.com A
dig +short www.example.com A
dig +short example.com AAAA

ステップ2:Debian/Ubuntu に Nginx と certbot をインストール

certbot の Nginx プラグインは Nginx の設定を自動で書き換えてくれます。標準リポジトリからインストールします。

apt update
apt install -y nginx certbot python3-certbot-nginx
systemctl enable --now nginx
ufw allow 'Nginx Full'     # if UFW is enabled

ステップ3:Rocky Linux/AlmaLinux/CentOS に Nginx と certbot をインストール

RHEL 系では certbot は EPEL リポジトリから提供されます。firewalld で HTTP と HTTPS も開放します。

dnf install -y epel-release
dnf install -y nginx certbot python3-certbot-nginx
systemctl enable --now nginx
firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --reload

ステップ4:サイトと Nginx の server ブロックを作成

ドキュメントルートとテストページを作成します。SELinux が有効なシステムでは、restorecon で Nginx がファイルを読めるようにします。

mkdir -p /var/www/example.com
echo '<h1>example.com is online</h1>' > /var/www/example.com/index.html
restorecon -Rv /var/www/example.com    # Rocky/Alma/CentOS with SELinux only

次に、ドメイン用の server ブロックを追加します。

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

ディストリビューションに応じた場所に保存し、構文を確認して Nginx をリロードします。

# Debian / Ubuntu: save as /etc/nginx/sites-available/example.com, then
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

# CentOS / Rocky / AlmaLinux: save as /etc/nginx/conf.d/example.com.conf

nginx -t && systemctl reload nginx
curl -I http://example.com

curl -I が 200 OK を返せば HTTP でアクセスできており、証明書を取得する準備は完了です。

ステップ5:certbot --nginx で Let's Encrypt の無料 SSL 証明書を取得

証明書に含めるすべてのドメイン名を指定して certbot を実行します。初回は期限通知用のメールアドレスと Let's Encrypt 規約への同意を求められます。--redirect を付けると HTTP から HTTPS への自動リダイレクトが追加されます。

certbot --nginx -d example.com -d www.example.com --redirect

certbot は Nginx が配信する一時ファイルでドメインの管理権を確認し、server ブロックに証明書を設定して Nginx をリロードします。

ステップ6:自動更新が動作するか確認

Let's Encrypt の証明書は有効期間が短いため、自動更新が欠かせません。ドライランなら実際の証明書を変えずに更新処理全体をテストできます。

certbot renew --dry-run

# Debian / Ubuntu: the timer is enabled by the package
systemctl list-timers | grep certbot

# Rocky / AlmaLinux (EPEL): enable the renewal timer once
systemctl enable --now certbot-renew.timer

ドライランが成功し、タイマーが有効になっていれば追加の作業は不要です。

ステップ7:HTTPS を強制して結果を確認

--redirect を付けなかった場合は、certbot が作成した HTTPS ブロックはそのままに、80 番ポートのブロックをリダイレクトに置き換えれば HTTPS を強制できます。

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Nginx をリロードして確認します。

curl -I http://example.com      # expect 301 to https://
curl -I https://example.com     # expect 200
certbot certificates

別の方法:aaPanel でワンクリック SSL

サーバーで aaPanel を使っている場合は、手動の手順を省略できます。Website でサイトを追加し、サイト設定の SSL セクションで Let's Encrypt を選び、ドメイン名を選択して適用します。最後に Force HTTPS をオンにすれば完了で、更新も aaPanel が自動で行います。ステップ1の DNS レコードは引き続き必要です。

よくある質問

certbot が接続エラーやタイムアウトで失敗します。

A/AAAA レコードがこのサーバーを指しているか、UFW や firewalld で 80 番と 443 番が開いているか、Nginx が起動しているかを確認してください。検証に IPv6 が使われることがあるため、誤った AAAA レコードはよくある原因です。

1 枚の証明書で複数のドメインをカバーできますか?

できます。certbot コマンドに -d を追加してください。すべての名前がこのサーバーに解決される必要があります。

更新後に Nginx を再起動する必要はありますか?

不要です。certbot の Nginx プラグインが更新成功後に自動で Nginx をリロードします。

それでも解決しない場合は、チケットを送信して JUSTG テクニカルサポートにお問い合わせください。

この回答は役に立ちましたか?

関連チュートリアル

root@vps: ~ $ ssh-keygen -t ed25519 -C "laptop-2026"$ ssh-copy-id -i ~/.ssh/id_ed25519.pub root@203…$ ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 … Linuxサーバー Linux SSH 鍵認証の設定方法:ed25519 鍵でログインしパスワード認証を無効化 ed25519 鍵で Linux VPS に SSH 鍵認証を設定し、authorized_keys の権限を整えてパスワード認証を安全に無効化する手順。 10 分で読めます 7 チュートリアルを読む root@vps: ~ $ openssl rand -base64 18$ passwd root$ ss -tlnp | grep ':2222' || echo "port 2222 is… Linuxサーバー Linux VPS で SSH ポート番号と root パスワードを安全に変更する方法 Linux の SSH ポート変更と root パスワード変更を、SELinux・ファイアウォール・Ubuntu ssh.socket・VNC 復旧まで解説。 12 分で読めます 6 チュートリアルを読む root@vps: ~ $ ss -tulpn$ sshd -T | grep -i '^port'$ nohup sh -c 'sleep 600; ufw disable' >/dev/nu… Linuxサーバー Linux ファイアウォール設定:VPS で UFW と firewalld を使う方法(IPv6 対応) UFW / firewalld で Linux ファイアウォールを設定。SSH 優先許可、Web ポート、送信元 IP 制限、IPv6、締め出し時の復旧まで。 12 分で読めます 7 チュートリアルを読む root@vps: ~ $ free -h$ swapon --show$ df -h / Linuxサーバー Linux VPS にスワップ領域を追加する方法(512MB・1GB の小容量プラン向け) 小容量 Linux VPS にスワップを追加。fallocate / dd でスワップファイル作成、fstab 登録、swappiness 調整まで。 8 分で読めます 7 チュートリアルを読む