ところが、構成ミスやDNS未設定などにより証明書の自動発行がループしてしまい、Let’s Encrypt の レートリミット(制限)に引っかかることがあります。
今回は実際に起こったケースをもとに、その原因と対応策を解説します。
レートリミットに引っかかる原因
まずは原因から解説します。
nginx-proxyの構成
以下の構成を前提とします。
services:
nginx-proxy:
image: jwilder/nginx-proxy:alpine
container_name: nginx-proxy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./certs:/etc/nginx/certs:rw
- ./acme:/etc/acme.sh
- ./vhost.d:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html
networks:
- proxy
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nginx-letsencrypt
restart: always
environment:
- NGINX_PROXY_CONTAINER=nginx-proxy
- DEFAULT_EMAIL=tatuya.220@outlook.jp
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./certs:/etc/nginx/certs:rw
- ./acme:/etc/acme.sh
- ./vhost.d:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html
depends_on:
- nginx-proxy
networks:
- proxy
networks:
proxy:
external: true
ボリューム設定は次のようになっているので、証明書やacmeの作業ファイルは永続化されています。
./certs
: 証明書(.crt
,.key
)を保存./acme
: ACMEアカウント、チャレンジ一時ファイル./vhost.d
,./html
: HTTP-01 チャレンジ対応、vhost個別設定
つまり、再起動しても証明書が消える構成ではなく、問題なしです。
証明書が何度も発行される原因
大きく二つの原因があるようです。
1. DNSが未設定(NXDOMAIN)
ログに以下のようなエラーが出ている場合です。
NXDOMAIN looking up A for api.example.com
この場合はapi.example.com
に Aレコードが無いため、Let’s Encrypt の認証が通らずに再試行が続きます。
対策としては、VPSの管理画面などでAレコードをサーバーに向ける必要があります。
2. 短期間で証明書の再発行が続く
Let’s Encrypt では同一ドメインに対して 7日間で5回まで の発行制限があります。
Error creating new order. Le_OrderFinalize not found.
detail: "too many certificates (5) already issued for this exact set of identifiers..."
status: 429
上記のようなエラーが出たら、しばらく時間を置く必要があります。
レートリミットに引っかかってしまったら?
レートリミットに引っかかった場合の対処法をご説明します。
次のリトライ可能時刻を確認する
docker logs
コマンドを実行して、次のようなログを探しましょう。
"detail": "too many certificates (5) already issued for this exact set of identifiers in the last 168h0m0s, retry after 2025-07-16 20:47:21 UTC"
上記の場合だと、次回の証明書発行は 2025年7月16日 20:47:21 UTC(日本時間 7月17日 5:47頃)以降に可能と分かります。
次のリトライ可能時刻まで コンテナを停止して待機します。
docker compose stop nginx-letsencrypt
DNSレコードが向いているかを調べる
DNSレコードがサーバーに向いていないと、証明書取得は失敗します。
dig
コマンドでDNSを確認できます。
dig +short api.example.com
返答が無い場合(空欄)はDNSが未設定なので、VPS管理画面などで設定が必要です。
また、設定してから浸透まで少し時間がかかります。設定後しばらく経ってからdig
コマンドで確認するのが確実です。
おわりに
Let’s Encrypt は無料かつ強力なSSL証明書取得システムですが、自動化構成では想定外の再発行ループが起きがちです。
DNS設定やボリュームの永続化、ステージング環境の活用などを意識することで、安全に運用できるようになります。
最後に注意点をまとめます。
対策 | 内容 |
---|---|
✅ DNS設定の事前確認 | 各サブドメインに正しくAレコードを設定する |
✅ リトライ制御 | レートリミットにかかったら letsencrypt コンテナを一時停止 |
✅ 証明書の再利用 | ./certs などの永続ボリュームを削除しないこと |
迂回ルートとしてステージング環境を使う方法もありますが、今回は割愛しました。
またの機会にご説明できればと思います。
コメント