Reverse-Proxy
當發生衝突時,Caddy 會選擇哪個匹配器?
Caddyfile 中的指令可以具有將它們限制為特定請求的“匹配器”。這讓 Caddy 2 為不同的路徑提供不同的內容,但是當多個指令匹配同一個請求時會發生什麼?
如果我想使用 Caddy 2 為一個主要是靜態的網站提供服務,但將一個
/api/
區域轉發給某個 Node.js 程序,我的 Caddyfile 可能如下所示:fake-example.edge.app { root * /var/www/example reverse_proxy /api/* localhost:9000 file_server * }
請求
/api/user
將同時匹配 thefile_server *
和reverse_proxy /api/*
匹配器,因此不清楚該請求將轉到文件系統還是 Node.js 程序。我在 Caddy 2 文件中找不到任何描述應該發生什麼的內容。在我自己的測試中,結果似乎取決於指令在文件中出現的順序,較早的條目“獲勝”。應該發生什麼?如果它是“未定義的行為”,是否有更好的方法來編寫此文件以避免歧義?
在我的理解和經驗
reverse_proxy
中優先,因為指令具有預設的隱式順序:https ://caddyserver.com/docs/caddyfile/directives#directive-order 。要強制執行不同的訂單,您至少有 3 個選項:
- 使用路線:
route /api/* { file_server reverse_proxy localhost:9000 }
order
使用全域選項更改預設順序handle
與file_server
之前一起使用reverse_proxy
根據我的理解和經驗,更具體的考慮比更通用的。
例如,在您的情況下,任何匹配 /API/ 的東西都應該轉發到節點,而其他任何東西都應該轉發到普通的網路伺服器。
無論如何,只要 /api/ 不是網站上的實際文件夾,訪問網站的請求就無關緊要
另請參閱:https ://caddyserver.com/docs/caddyfile/directives/root