私の状況は次のとおりです。
support.example.com
->ポート80がこのサーバーに転送されますhr.example.com
両方ともApache2を実行しています。
サーバーBでは、Let's encryptを使用します。証明書を更新できるようにするために、./well-known/acme-challenge
以外のすべてのHTTP要求をHTTPSにリダイレクトします。
サーバーAの仮想ホストは次のとおりです。
<VirtualHost *:80>
ServerName hr.example.com
Redirect / https://hr.example.com
RewriteEngine on
RewriteRule ^"/.well-known/acme-challenge\$" "<IP-SERVER B>/.well-known/acme-challenge" [PT]
</VirtualHost>
ただし、これにより、http://hr.example.com/.well-known/acme-challenge
へのリクエストが実際にHTTPSにリダイレクトされます。どうすれば例外を作ることができますか?
LetsEncryptボットが使用するAcme Challengeプロトコルは、リダイレクトに従います。要求を別のマシンにリバースプロキシする必要はありません。それらの要求をそこにリダイレクトするだけです。
私は最初にチャレンジ用の特定のリダイレクトを作成し、次に他のすべてをHTTPSにリダイレクトします。
<VirtualHost *:80>
ServerName hr.example.com
Redirect permanent /.well-known/acme-challenge/ http://support.example.com/.well-known/acme-challenge/
Redirect permanent / https://hr.example.com/
</VirtualHost>
この仮想ホストを作成し、hr.example.com
を/etc/hosts
ファイルに127.0.0.1
として配置することで、サーバーでこの一連のルールをテストしました。
# curl -s --head http://hr.example.com/
HTTP/1.1 301 Moved Permanently
Location: https://hr.example.com/
# curl -s --head http://hr.example.com/.well-known/acme-challenge/foo
HTTP/1.1 301 Moved Permanently
Location: http://support.example.com/.well-known/acme-challenge/foo
多くの場合、書き換えルールとリダイレクトディレクティブを混在させることは問題です。どちらが最初に実行されるかは必ずしも明確ではありません。プロキシメソッドを使用する場合は、プロキシディレクティブに続く書き換えルールにリダイレクトを切り替えます。書き換えルールも少し変更しました。パススルールール([P]
)ではなく、プロキシルール([PT]
)である必要があります。また、ディレクトリ自体だけでなく、そのチャレンジディレクトリ内のすべてのファイルをプロキシする必要があります。
<VirtualHost *:80>
ServerName hr.example.com
RewriteEngine on
RewriteRule ^/.well-known/acme-challenge/(.*) http://<IP-SERVER B>/.well-known/acme-challenge/$1 [P,L]
ProxyPassReverse /.well-known/acme-challenge/ http://<IP-SERVER B>/.well-known/acme-challenge/
RewriteRule /(.*) https://hr.example.com/$1 [R=301,L]
</VirtualHost>
私はブログについて 私が持っていた同様の問題。私が役立つと思ったトリックですが、あなたの状況と完全に一致していないように見えるのは、プロキシルールの例外を作成することでした。サイト全体をリバースプロキシしているが、acmeチャレンジをローカルで処理するために例外を作成する(またはリダイレクトすることを許可する)場合は、次の方法でそのディレクトリのプロキシを防止できます。
# Don't allow this directory to be reverse proxied
ProxyPass /.well-known/acme-challenge/ !