ドキュメント
a プロジェクト

リバースプロキシ クイックスタート

このガイドでは、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 ハンドシェイクで使用されます)。