リバースプロキシ クイックスタート
このガイドでは、HTTPS の有無にかかわらず、本番環境対応のリバースプロキシを迅速に稼働させる方法を示します。
前提条件
- 基本的なターミナル/コマンドラインスキル
- PATH に
caddy
が設定されていること - プロキシ先のバックエンドプロセスが実行されていること
このチュートリアルでは、バックエンドの HTTP サービスが 127.0.0.1:9000
で実行されていることを前提としています。これらのコマンドは Linux 用ですが、同じ原則が他のオペレーティングシステムにも適用されます。
設定ファイルなしでシンプルなリバースプロキシを実行することも、より柔軟性と制御性を高めるために設定ファイルを使用することもできます。
コマンドライン
マシン上のポート 2080 からポート 9000 へのプレーンテキスト HTTP プロキシを開始するには
caddy reverse-proxy --from :2080 --to :9000
その後、テストします
curl -v 127.0.0.1:2080
reverse-proxy
コマンド は、迅速かつ簡単なリバースプロキシを目的としています。(要件がシンプルであれば、本番環境で使用できます。)
Caddyfile
現在の作業ディレクトリに、次の内容の Caddyfile
という名前のファイルを作成します。
:2080
reverse_proxy :9000
この設定ファイルは、上記の caddy reverse-proxy
コマンドとほぼ同等です。
その後、同じディレクトリから実行します。
caddy run
その後、プロキシをテストします。
curl -v 127.0.0.1:2080
Caddyfile を変更した場合は、必ず Caddy をリロード してください。
これは簡単な例です。reverse_proxy
ディレクティブ を使用すると、さらに多くのことができます。
クライアントからプロキシへの HTTPS
Caddy は、ホスト名(ドメイン名)がわかっている場合、デフォルトで自動的に HTTPS を使用してプロキシを配信 します。caddy reverse-proxy
コマンドは、--from
フラグを省略すると localhost
をデフォルトで使用します。または、Caddyfile の最初の行をプロキシのドメイン名に置き換えることができます。
localhost
または.localhost
で終わるドメインを使用する場合、Caddy は自動更新される自己署名証明書を使用します。初めてこれを行う場合、Caddy が CA のルート証明書を信頼ストアにインストールしようとしたときに、パスワードの入力を求められる場合があります。- その他のドメイン名を使用する場合は、Caddy は公開的に信頼できる証明書を取得しようとします。DNS レコードがマシンを指していること、ポート 80 と 443 が公開に公開され、Caddy に向いていることを確認してください。
ポートを指定しない場合、Caddy は HTTPS に 443 をデフォルトで使用します。その場合、低ポートへのバインド権限も必要になります。Linux でこれを行うにはいくつかの方法があります。
- root として実行する(例:
sudo -E
)。 - または、
sudo setcap cap_net_bind_service=+ep $(which caddy)
を実行して、Caddy にこの特定の機能を与える。
HTTPS を提供する最も基本的な caddy reverse-proxy
コマンドを次に示します。
caddy reverse-proxy --to :9000
その後、テストします
curl -v https://
--from
フラグを使用してホスト名をカスタマイズできます。
caddy reverse-proxy --from example.com --to :9000
低ポートへのバインド権限がない場合は、より高いポートからプロキシできます。
caddy reverse-proxy --from example.com:8443 --to :9000
Caddyfile を使用している場合は、最初の行をドメイン名に変更するだけです。たとえば
example.com
reverse_proxy :9000
プロキシからバックエンドへの HTTPS
バックエンドが TLS をサポートしている場合、Caddy はそれ自体とバックエンドの間で HTTPS を使用してプロキシすることもできます。バックエンドアドレスに https://
を使用するだけです。
caddy reverse-proxy --from :2080 --to https://:9000
これには、バックエンドの証明書が、Caddy が実行されているシステムによって信頼されている必要があります。(Caddy は、明示的に設定されていない限り、自己署名証明書を信頼しません。)
もちろん、両端で HTTPS を使用することもできます。
caddy reverse-proxy --from example.com --to https://example.com:9000
これにより、クライアントからプロキシへの HTTPS と、プロキシからバックエンドへの HTTPS が提供されます。
プロキシ先のホスト名が、プロキシ元のホスト名と異なる場合は、--change-host-header
フラグを使用する必要があります。
caddy reverse-proxy \
--from example.com \
--to https://:9000 \
--change-host-header
デフォルトでは、Caddy は Host
を含むすべての HTTP ヘッダーをそのまま渡します。Caddy は Host ヘッダーから TLS ServerName を導出します。--change-host-header
は、Host ヘッダーをバックエンドのものにリセットするため、TLS ハンドシェイクを正常に完了できます。上記の例では、example.com
から localhost:9000
に変更され(そして localhost
が TLS ハンドシェイクで使用されます)。