### HTTP路由
Envoy包含一個[HTTP路由過濾器](../../Configurationreference/HTTPfilters/Router.md),可以用它來執行高級路由任務。這對于處理前端流量(傳統方式用反向代理來處理請求),或者構建服務間的Envoy網格是很有用的(通常根據HTTP頭部上字段可以路由以到達指定的上游服務集群)。 Envoy也支持配置為正向代理。在轉發代理配置中,網絡客戶端可以通過將他們的http代理適當地配置為Envoy。在高層次上,路由器接收一個傳入的HTTP請求,將其與上游集群進行匹配,獲取到上游集群中主機的連接池,并轉發該請求。路由器過濾器支持以下功能:
- 將domains/authorities映射到一組路由規則的虛擬主機
- 前綴和精確路徑匹配規則(區分大小寫和不區分大小寫)。當前不支持正則表達式/slug匹配,主要是因為它無法精確辨別路由規則是否相互沖突。由于這個原因,我們不建議在反向代理級別使用正則表達式/slug路由,但是我們可能會根據需求添加支持
- 根據TLS重定向到虛擬主機
- 根據path/host重定向的路由規則
- 顯式host改寫
- 根據上游主機的DNS名稱自動重寫host
- Prefix重寫
- Websocket在路由級別升級
- 通過HTTP頭或通過路由配置請求重試
- 通過HTTP頭或通過路由配置指定的請求超時
- 通過運行時間值將流量從一個上游群集轉移到另一個上(請參閱流量轉移/分流)
- 使用基于權重/百分比的路由(請參閱流量轉移/拆分)跨多個上游群集進行流量分流
- 任意頭匹配路由規則
- 虛擬集群場景,指定虛擬主機作為虛擬群集,由Envoy用于在標準群集級別之上生成附加統計信息。虛擬群集可以使用正則表達式匹配
- 基于優先級的路由
- 基于哈希策略的路由
- 非轉發代理支持絕對url
#### 路由表
HTTP連接管理器的配置,擁有所有配置的HTTP過濾器使用的路由表。雖然路由表主要用于路由過濾器,但是如果他們想根據請求的最終目的地做出決定,其他過濾器也可以訪問。例如,內置的速率限制過濾器參考路由表來確定是否應該基于路由來調用全局速率限制服務。即使決策涉及隨機性(例如,在運行時配置路由規則的情況下),連接管理器也確保所有獲取路由的調用對于特定請求是穩定的。
#### 重試語義
Envoy允許在路由配置中以及通過請求頭對特定請求配置重試。存在如下可能的配置:
- **最大重試次數**:Envoy將繼續重試任意次數。在每次重試之間使用指數退避算法。此外,所有重試都包含在整個請求超時內。由于大量的重試,這避免了很長的請求時間。
- **條件重試**:Envoy可以根據應用要求在不同類型的條件下重試。例如,網絡故障,所有5xx響應碼,冪等4xx響應碼等。
請注意:根據x-envoy重載的內容,重試可能無法使用。
#### 優先級路由
Envoy支持路由級別的優先級[路由](../../v1APIreference/HTTPRouteconfiguration/Route.md)。當前的優先級實現針對每個優先級級別使用不同的連接池和斷路設置。這意味著即使對于HTTP/2請求,兩個物理連接也將被用于上游主機。未來,Envoy可能會在單一連接上支持真正的HTTP/2優先級。
目前支持默認和高兩個優先級。
### 返回
- [架構介紹](../Architectureoverview.md)
- [簡介](../../Introduction.md)
- [首頁目錄](../../README.md)
- 首頁
- 簡介
- Envoy是什么
- 架構介紹
- 術語
- 線程模型
- 監聽器
- L3/L4網絡過濾器
- HTTP連接管理
- HTTP過濾器
- HTTP路由
- gRPC
- WebSocket支持
- 集群管理
- 服務發現
- 健康檢查
- 連接池
- 負載均衡
- 異常檢測
- 熔斷
- 全局限速
- TLS
- 統計
- 運行時配置
- 跟蹤
- TCP代理
- 訪問日志
- MongoDB
- DynamoDB
- Redis
- 熱重啟
- 動態配置
- 初始化
- 逐出
- 腳本
- 部署
- 業界對比
- 獲得幫助
- 歷史版本
- 編譯安裝
- 編譯
- 參考配置
- 演示沙箱
- 前端代理
- Zipkin跟蹤
- Jaeger跟蹤
- gRPC橋接
- 構建Envoy Docker鏡像
- 工具
- 配置參考
- V1 API 概述
- V2 API 概述
- 監聽器
- 網絡過濾器
- TLS客戶端身份認證
- Echo
- Mongo代理
- 速率限制
- Redis代理
- TCP代理
- HTTP連接管理器
- 路由匹配
- 流量轉移/分流
- HTTP頭部操作
- HTTP頭部清理
- 統計
- 運行時設置
- 路由發現服務
- HTTP過濾器
- 緩存
- CORS過濾器
- 故障注入
- DynamoDB
- gRPC HTTP/1.1 橋接
- gRPC-JSON 轉碼過濾器
- gRPC-Web 過濾器
- 健康檢查
- 速率限制
- 路由
- Lua
- 集群管理
- 統計
- 運行時設置
- 集群發現服務
- 健康檢查
- 熔斷
- 訪問日志
- 限速服務
- 運行時配置
- 路由表檢查工具
- 運維管理
- 命令行選項
- 熱重啟
- 管理接口
- 統計概述
- 運行時配置
- 文件系統
- 自定義擴展示例
- V1 API參考
- 監聽器
- 網絡過濾器
- TLS客戶端身份認證
- Echo
- HTTP連接管理
- Mongo代理
- 速率限制
- Redis代理
- TCP代理
- HTTP路由配置
- 虛擬主機
- 路由
- 虛擬集群
- 速率限制配置
- 路由發現服務
- HTTP過濾器
- 緩存
- CORS過濾器
- DynamoDB
- 故障注入
- gRPC HTTP/1.1 橋接
- gRPC-JSON 轉碼過濾器
- gRPC-Web 過濾器
- 健康檢查
- Lua
- 速率限制
- 路由
- 集群管理
- 集群
- 健康檢查
- 熔斷
- TLS上下文
- 異常值檢測
- HASH環負載均衡配置
- 異常檢測
- 集群發現服務
- 服務發現服務
- 訪問日志
- 管理接口
- 限速服務
- 運行時配置
- 跟蹤
- V2 API參考
- 啟動引導
- 監聽&監聽發現
- 集群&集群發現
- 服務發現
- 健康檢查
- HTTP路由管理&發現
- TLS配置
- 通用的類型
- 網絡地址
- 協議選項
- 發現API
- 限速組件
- 過濾器
- 網絡過濾器
- TLS客戶端身份認證
- HTTP連接管理
- Mongo代理
- 速率限制
- Redis代理
- TCP代理
- HTTP過濾器
- 緩存
- 故障注入
- 健康檢查
- Lua
- 速率限制
- 路由
- gRPC-JSON轉碼器
- 常見訪問日志類型
- 常見故障注入類型
- FAQ
- Envoy有多快?
- 我在哪里獲得二進制文件?
- 我如何設置SNI?
- 如何設置區域感知路由?
- 我如何設置Zipkin跟蹤?