ユーザ用ツール

サイト用ツール


サイドバー

サーバ:ssl証明書:自動更新に失敗_let_s_encrypt:ドキュメントルートの問題

【Let's Encrypt】ドキュメントルートの問題で自動更新に失敗

Laravel で作ったサイトで、自動更新に失敗しました。
まず、サーバのログを確認します。

sudo less /var/log/letsencrypt/letsencrypt.log

すると以下のようなエラーが表示されました。

YYYY-mm-dd HH:ii:ss :DEBUG:certbot._internal.reporter:Reporting to user: The following errors were reported by the server:

Domain: example.com
Type: unauthorized
Detail: Invalid response from https://example.com/.well-known/acme-challenge/FILE_NAME
~ 略 ~
YYYY-mm-dd HH:ii:ss :INFO:certbot._internal.auth_handler:Cleaning up challenges
YYYY-mm-dd HH:ii:ss :DEBUG:certbot._internal.plugins.webroot:Removing /var/www/example.com/.well-known/acme-challenge/FILE_NAME

上記ログから「.well-known/acme-challenge/FILE_NAME」への https アクセスが失敗したことと、検証に使用した「.well-known/acme-challenge/FILE_NAME」ファイルを削除したことが分かりました。
しかし、よくよく削除されたファイルのパスを確認すると、example.com のドキュメントルートではないことに気が付きました。

この時は、まだ Laravel の仕組みがわかっておらず、ドキュメントルートの下に public を指定してシンボリックリンクを貼ってしまっていました。

# /var/www/example.com/public にアクセスしたら laravel の public を参照
ln -s /var/www/laravel_project/public /var/www/example.com/public

そして、ドキュメントルートにアクセスがあったら public にリダイレクトするように .htaccess をわざわざ設置してました。

vi /var/www/example.com/.htaccess

RewriteEngine On
RewriteRule ^(.*)$ public/$1 [QSA,L]

当然、そんな設定を certbot-renew は知る由もないわけで、ドキュメントルート直下である、以下にファイルを作成し、自動更新に失敗してしまっていました。

/var/www/example.com/.well-known/acme-challenge/FILE_NAME

そこで、シンボリックリンクを一度削除し、貼り直します。

# シンボリックリンク削除
unlink /var/www/example.com/public

# 貼り直し
ln -s /var/www/laravel_project/public /var/www/example.com

サイトが正常に動作するのを確認します。
問題なければ、自動更新が成功することを確認して終了です。

コメント

コメントを入力. Wiki文法が有効です:
 
サーバ/ssl証明書/自動更新に失敗_let_s_encrypt/ドキュメントルートの問題.txt · 最終更新: 2020/11/05 12:25 by humolife