跳至正文

路徑回應

系統設定 → 閘道 → 路徑回應 可替反向代理服務 Host 加上少量 Path-level 規則。它只可在採用 Host 路由的子網域模式中編輯,包括公網直達的 子網域模式內網穿透 → 子網域映射;路徑模式、直連模式以及單一檔案或目錄回應不提供此功能。Host 仍是主要路由;請求未命中路徑規則時,會回到該 Host 映射的預設 Target。

此功能適合 Health Check、固定狀態回應,或將同一 Host 下的一小段 API 轉送至另一個上游。若需要用大量路徑區分不同應用程式,請使用相容用途的路徑映射,不要在 Host 路由上重新打造一套 Path Gateway。

比對順序

text
api.example.com/healthz -> 固定回應 200 ok
api.example.com/v2/*    -> http://127.0.0.1:8080
api.example.com/其他路徑 -> Host 預設 Target

請先選擇既有的反向代理服務 Host。身分驗證服務 Host 與靜態檔案或目錄 Host不會出現在可選清單中。

路徑必須以 / 開頭,但不可為根路徑 /。下列路徑保留給身分驗證、分享或內部功能使用,無法設定:

  • /__ 開頭的路徑
  • /s
  • /s/

每個 Host 下,相同比對方式與相同路徑只能有一條規則。

規則欄位

欄位可用值行為
比對方式完全符合/Prefix只比對完整路徑,或比對該 Prefix 及其子路徑
動作反向 Proxy/固定回應轉送至另一個上游,或直接由閘道回應
驗證行為繼承 Host/公開存取 / 要求登入沿用 Host、公開目前路徑,或要求此路徑通過驗證
Target URLHTTP / HTTPS URL只供反向 Proxy 動作使用
移除比對路徑開/關/api/users/users 送出,或保留原始路徑
Rewrite HTML 路徑開/關替頁面資源補上 Path Prefix;純 API 通常不需要

固定回應可設定 100599 的 Status Code、Content-Type、Response Body 與自訂 Response Header。ConnectionContent-LengthContent-TypeTransfer-EncodingUpgrade 等 Transport-level Header 無法在自訂 Header 中覆寫;Content Type 請使用專用欄位設定。

路徑驗證行為

規則預設使用 繼承 Host,沿用目前 Host 的 要求登入 與既有嚴格允許清單。選擇 公開存取 後,只有命中此路徑規則的請求略過登入;同一 Host 的其他路徑仍使用 Host 原則。

選擇 要求登入 可保護公開 Host 下的指定路徑,沿用該 Host 的允許清單與進階驗證原則。包含此類路徑的 Host 也會出現在憑證服務範圍及 Cookie 網域相容性檢查中;授權範圍以 Host 為單位,不分配單一路徑。

例如公開 Host 的 /admin 前綴要求登入時,一般頁面仍公開,/admin 及其子路徑需通過驗證。精確比對優先於前綴,前綴採最長匹配;應同時驗證受保護路徑與相鄰公開路徑。

公開路徑適合 Health Check、Webhook Callback 或確實需要匿名存取的固定內容。此選項涵蓋整個完全符合或 Prefix 範圍;將 /api Prefix 設為公開,也會公開其命中的子路徑。請縮小比對範圍,並確認 Upstream 仍執行必要的權限檢查。

反向 Proxy 動作會將 Host 的 略過 Basic Auth 憑據注入送往實際 Target 的請求,用來通過 Target Service 本身的 Basic Auth;這不是 fn-knock 的訪客登入憑據。Proxy Header 與 Host 保留會依該實際 Target 共用的 Runtime 規則決定,可能與 Host 預設 Target 的設定不同。固定回應沒有上游,因此不會傳送 Basic Auth、Proxy Header 或與 Host 保留相關的 Request Header。

來源為 Loopback、私有網路或 Link-local IP 時,身分驗證服務會回傳 local_exempt。因此,從區域網路存取時可能不會觸發登入流程或嚴格允許清單拒絕;公網原則必須從真實外部網路驗證。

範例

Health Check:

text
路徑         /healthz
比對         完全符合
動作         固定回應
Status Code  200
Content-Type text/plain; charset=utf-8
Body         ok

API 獨立轉送至上游:

text
路徑        /api
比對        Prefix
動作        反向 Proxy
Target      http://127.0.0.1:8080
移除路徑    開

平台限制

路徑回應可用於飛牛 FPK、Docker、OpenWrt、Linux、群暉 DSM 7 SPK 與 Windows 採用 Host 路由的子網域模式,包括 內網穿透 → 子網域映射。它不會開放防火牆連接埠、建立 DNS Record 或發布 Docker Port,也無法讓原本無法連線的 Target 變成可達。

疑難排解

  1. 確認目前使用 Host 路由、服務 Host 的回應類型為反向代理,且已選取正確的 Host。
  2. 檢查路徑格式、保留路徑,以及完全符合/Prefix 的比對方式。
  3. 核對規則的驗證行為;選擇繼承時,再判斷請求是否遭 Host 的登入或允許清單原則攔截。
  4. 從 fn-knock 的 Runtime 環境存取反向 Proxy Target。
  5. 請求記錄中核對 Host、路徑、路由類型、Status Code 與上游 Target。

Host 主要路由請參閱子網域映射,相關全域選項請參閱系統設定

QQ 群組:1081609274