アップストリームオプション
rpxyは、アップストリームのバックエンドアプリケーションへのリクエストメッセージの転送方法を制御するためのいくつかのオプションを提供しています。これらはリバースプロキシエントリごとにupstream_options配列で指定します。
設定
[[apps.app1.reverse_proxy]]
upstream = [
{ location = 'backend.local:8080' },
]
upstream_options = [
"set_upstream_host",
"forwarded_header",
]利用可能なオプション
keep_original_host
クライアントリクエストの元のHostヘッダーを保持します。これがデフォルトの動作であり、set_upstream_hostと両方指定された場合はこちらが優先されます。
set_upstream_host
Hostヘッダーをアップストリームのホスト名(例: backend.local:8080)で上書きします。keep_original_hostも指定されている場合は無視されます。
upgrade_insecure_requests
転送リクエストにUpgrade-Insecure-Requests: 1ヘッダーが存在しない場合に追加します。
force_http11_upstream
アップストリーム接続にHTTP/1.1を強制します。force_http2_upstreamと排他的です。
force_http2_upstream
アップストリーム接続にHTTP/2を強制します。force_http11_upstreamと排他的です。
forwarded_header
標準のForwardedヘッダー (RFC 7239)を生成して転送リクエストに追加します。
デフォルトでは、rpxyは設定なしで以下の転送ヘッダーをすべてのリクエストで自動的に再構築します:
| ヘッダー | 説明 |
|---|---|
X-Forwarded-For | 転送チェーンから再構築されます。デフォルト(trusted_forwarded_proxies未設定)では受信した値は無視され、直接の接続元IPアドレスのみが載ります。直接の接続元が信頼されたプロキシの場合は、受信したチェーンが保持・正規化されます。 |
X-Forwarded-Proto | 受信接続に基づいてhttpsまたはhttpで上書きされます。 |
X-Forwarded-Port | リッスンポートで上書きされます。 |
X-Forwarded-Host | 元の(クライアントから見た)ホスト名で上書きされます。クライアントが指定した値がそのまま転送されることはありません。参考情報としてのみ扱ってください。 |
X-Forwarded-SSL | 受信接続に基づいてonまたはoffに設定されます。 |
X-Real-IP | クライアントのIPアドレスに設定されます。 |
X-Original-URI | 元のリクエストURIに設定されます。 |
v0.12.0以降、デフォルトではどのプロキシも信頼されません。前段から受信した転送ヘッダーは破棄され、直接の接続元アドレスから再構築されます。
rpxyの前段にある信頼できるロードバランサーやCDNが構築したチェーンを保持するには、グローバルオプションtrusted_forwarded_proxiesを設定してください。詳細は信頼する転送プロキシを参照してください。forwarded_headerオプションは、これらのデフォルトヘッダーに加えてRFC 7239のForwardedヘッダーを追加します:
Forwarded: for=192.0.2.1;proto=https;host=app1.example.com受信リクエストに既に
Forwardedヘッダーが含まれている場合、rpxyはforwarded_headerオプションがなくても(trusted_forwarded_proxiesに従って)整合性のために更新します。このオプションは、Forwardedヘッダーがまだ存在しない場合に新しく生成するかどうかを制御します。例
[[apps.app1.reverse_proxy]]
upstream = [
{ location = 'www.example.com', tls = true },
{ location = 'www.example.org', tls = true },
]
load_balance = "round_robin"
upstream_options = [
"set_upstream_host",
"forwarded_header",
"force_http11_upstream",
]
[[apps.app1.reverse_proxy]]
path = '/api'
replace_path = '/'
upstream = [
{ location = 'api.internal:3000' },
]
upstream_options = [
"upgrade_insecure_requests",
]