本文へ移動

パス単位の固定レスポンス

システム設定 → ゲートウェイ → パス別応答 では、特定のサービス用 Host に少数のパス単位ルールを追加できます。この項目は、Host ルーティングを使うサブドメインモードでのみ編集できます。これには、グローバル IP から直接公開する サブドメインモード と、トンネル → サブドメインマッピング が含まれます。パスモードと直接接続モードでは利用できません。Host は引き続きメインルートとして機能し、どのパスルールにも一致しないリクエストは、その Host マッピングのデフォルト Target へ送信されます。

ヘルスチェック、固定ステータスの応答、同じ Host にある一部の API だけを別のアップストリームへ転送する用途に適しています。多数のパスで複数のアプリを構成する場合は、互換性のために用意されているパスマッピングを使用し、Host ルーティング上に別のパスゲートウェイを作らないでください。

マッチング順序

text
api.example.com/healthz -> 固定レスポンス 200 ok
api.example.com/v2/*    -> http://127.0.0.1:8080
api.example.com/other-path -> Host のデフォルト Target

最初に既存のサービス用 Host を選択します。認証サービスの Host は選択肢に表示されません。

パスは / で始める必要がありますが、ルートパス / は設定できません。次のパスは認証、共有、内部機能のために予約されているため、設定できません。

  • /__ で始まるパス
  • /s
  • /s/

各 Host では、一致方法とパスの組み合わせごとにルールを 1 つだけ作成できます。

ルールのフィールド

フィールド動作
一致方法完全一致 / 前方一致パス全体が一致する場合だけ、または指定したプレフィックスとその配下のパスに一致します
アクションリバースプロキシ / 固定レスポンス別のアップストリームへ転送するか、ゲートウェイから直接応答します
転送先HTTP / HTTPS URLリバースプロキシアクションでのみ使用します
一致したパスを除去オン / オフ/api/users/users として転送するか、元のパスを維持します
HTML 内のパスを書き換えオン / オフページリソースのパスにプレフィックスを補います。通常、API だけの場合は不要です

固定レスポンスには、100599 のステータスコード、Content-Type、本文、カスタムレスポンスヘッダーを設定できます。ConnectionContent-LengthContent-TypeTransfer-EncodingUpgrade など、転送処理に関わるヘッダーはカスタムヘッダーで上書きできません。コンテンツタイプは専用のフィールドで設定してください。

Host のアクセスポリシーを継承

パス別応答は、現在の Host の ログインを必須にする と既存の厳格な許可リストルールを継承します。アクセス制御を迂回するための入口ではありません。

リバースプロキシアクションでは、Host の Basic 認証を自動入力 に設定した認証情報が、実際の Target へ送るリクエストに挿入されます。これは転送先サービス自身の Basic 認証を通過するためのもので、fn-knock へアクセスするユーザーのログイン認証情報ではありません。プロキシヘッダーと Host ヘッダーの維持は、実際の Target に対する共有ランタイムルールによって決まり、Host のデフォルト Target に対する設定とは異なる場合があります。固定レスポンスにはアップストリームがないため、Basic 認証、プロキシヘッダー、Host ヘッダーの維持に関するリクエストヘッダーは送信されません。

送信元がループバック、プライベートアドレス、リンクローカルアドレスの場合、認証サービスは local_exempt を返します。このため、LAN からのアクセスではログインや厳格な許可リストによる拒否が発生しないことがあります。インターネット側のポリシーは、実際の外部ネットワークから検証してください。

ヘルスチェック:

text
パス       /healthz
一致       完全一致
アクション 固定レスポンス
ステータス 200
Content-Type text/plain; charset=utf-8
本文       ok

API だけを別のアップストリームへ転送:

text
パス         /api
一致         前方一致
アクション   リバースプロキシ
転送先       http://127.0.0.1:8080
一致部分を除去 オン

プラットフォーム上の制約

パス別応答は、fnOS FPK、Docker、OpenWrt、Linux、Synology DSM 7 SPK、Windows で、Host ルーティングのサブドメインモードを使用している場合に利用できます。これには トンネル → サブドメインマッピング も含まれます。この機能がファイアウォールのポートを開放したり、DNS レコードを作成したり、Docker ポートを公開したりすることはありません。到達不能な Target が到達可能になることもありません。

トラブルシューティング

  1. Host ルーティングを使用し、正しいサービス用 Host が選択されていることを確認します。
  2. パスの形式、予約パス、完全一致/前方一致の設定を確認します。
  3. リクエストが Host のログインまたは許可リストポリシーでブロックされていないかを先に確認します。
  4. fn-knock の実行環境から、リバースプロキシの Target へアクセスします。
  5. リクエストログで、Host、パス、ルート種別、ステータスコード、アップストリームの転送先を照合します。

Host のメインルートについてはサブドメインマッピング、関連するグローバル設定についてはシステム設定を参照してください。

QQ コミュニティ:1081609274