### HTTP連接管理
- HTTP連接管理[架構概述](../../Introduction/Architectureoverview/HTTPconnectionmanagement.md)。
- HTTP協議[架構概述](../../Introduction/Architectureoverview/HTTPconnectionmanagement.md)。
```
{
"name": "http_connection_manager",
"config": {
"codec_type": "...",
"stat_prefix": "...",
"rds": "{...}",
"route_config": "{...}",
"filters": [],
"add_user_agent": "...",
"tracing": "{...}",
"http1_settings": "{...}",
"http2_settings": "{...}",
"server_name": "...",
"idle_timeout_s": "...",
"drain_timeout_ms": "...",
"access_log": [],
"use_remote_address": "...",
"forward_client_cert": "...",
"set_current_client_cert": "...",
"generate_request_id": "..."
}
}
```
- **codec_type**<br />
(required, string) 提供連接管理器所使用的編解碼器的類型。可能的值有:
- **http1**<br />
連接管理器將假定客戶端正在使用HTTP/1.1。
- **http2**<br />
連接管理器將假定客戶端正在使用HTTP/2(Envoy并不需要通過TLS發送HTTP/2或者使用ALPN,應預先設定好)。
- **auto**<br />
對于每個新的連接,連接管理器將決定使用哪個編解碼器。此模式支持TLS監聽器的ALPN以及明文監聽器的協議鑒別。如果ALPN數據可用,則優選,否則使用協議鑒別。幾乎在所有情況下,設置此選擇的是正確的選擇。
- **stat_prefix**<br />
(required, string) 發布連接管理器的統計信息時使用的人類可讀前綴。有關更多信息,請參閱[統計文檔](../../Configurationreference/HTTPconnectionmanager/Statistics.md)。
- **rds**<br />
(sometimes required, object) 連接管理器配置必須指定選擇`rds`或`route_config`其中之一。如果指定了`rds`,則連接管理器的路由表將通過RDS API動態加載。有關更多信息,請參閱[文檔](../../v1APIreference/HTTPRouteconfiguration/RoutediscoveryserviceRDS.md)。
- **route_config**<br />
(sometimes required, object) 連接管理器配置必須指定選擇`rds`或`route_config`其中之一。如果指定了`route_config`,則認為該連接管理器的路由表是靜態的,并在此屬性中指定路由配置。
- **filters**<br />
(required, array) 構成該連接管理器請求的[過濾器鏈](../../Introduction/Architectureoverview/HTTPfilters.md),包含多個HTTP過濾器的列表當請求事件發生時,將按順序處理過濾器。
- **add_user_agent**<br />
(optional, boolean) 連接管理器是否處理[user-agent](../../Configurationreference/HTTPconnectionmanager/HTTPheadermanipulation.md#user-agent)和[x-envoy-downstream-service-cluster](../../Configurationreference/HTTPconnectionmanager/HTTPheadermanipulation.md#x-envoy-downstream-service-cluster)頭。有關更多信息,請參閱相關鏈接。默認為false。
- **tracing**<br />
(optional, object) 定義的跟蹤服務的配置對象,提供連接管理器跟蹤數據發往的[跟蹤服務程序](../../v1APIreference/Tracing.md)配置。
- **http1_settings**<br />
(optional, object) 傳遞給HTTP/1編解碼器的擴展配置。
- **allow_absolute_url**<br />
(optional, boolean) 在請求中處理具有絕對URL的http請求。這些請求通常由客戶端發送到轉發/顯式代理。這允許客戶端將envoy配置為他們的http代理。例如,在Unix中,這通常是通過設置http_proxy環境變量來完成的。
- **http2_settings**<br />
(optional, object) 傳遞給HTTP/2編解碼器的擴展配置。目前支持的設置有:
- **hpack_table_size**<br />
(optional, integer) 允許編碼器使用的動態HPACK表的最大值(以八位字節為單位)。有效值范圍從0到4294967295(2^32-1),默認值為4096. 0表示禁用頭部壓縮。
- **max_concurrent_streams**<br />
(optional, integer) 一個HTTP/2連接上同時允許的最大并發流。有效值范圍從1到2147483647(2^31-1),默認值為2147483647。
- **initial_stream_window_size**<br />
(optional, integer) 初始時控制流窗口的大小。有效值范圍從65535(2^16-1,HTTP/2默認值)到2147483647(2^31-1,HTTP/2最大值),默認值為268435456(256*1024*1024)。
注:65535是來自HTTP/2規范的初始窗口大小。我們現在只支持增加默認的窗口大小,所以也是最小的。
這個字段也可以作為Envoy在HTTP/2編解碼器緩沖區中每個字節緩沖的字節數的軟限制。一旦緩沖區到達這個指針,將觸發停止接收數據流到編解碼器緩沖區。
- **initial_connection_window_size**<br />
(optional, integer) 與`initial_stream_window_size`類似,但是用于連接級流量控制窗口。目前,這與`initial_stream_window_size`具有相同的最小/最大/默認值。
這些與上游群集`http2_settings`中提供的選項相同。
- **server_name**<br />
(optional, string) 可選,連接管理器將在響應中增加服務名的頭部字段。如果未設置,則默認為Envoy。
- **idle_timeout_s**<br />
(optional, integer) 由該連接管理器所管理的連接空閑超時時間(以秒為單位)。空閑超時被定義為一段時間內沒有活動請求。如果沒有設置,則沒有空閑超時。當達到空閑超時時,連接將被關閉。如果連接是HTTP/2連接,則在關閉連接之前會發生順序排空。請參閱[drain_timeout_ms](#drain_timeout_ms)。
- **drain_timeout_ms**<br />
(optional, integer) Envoy將在發送HTTP/2“關閉通知”(GOAWAY幀與最大流ID)和最終GOAWAY幀之間等待的時間。這是為了讓Envoy支持與最后GOAWAY幀競爭的新的流處理,所提供的寬限期。在這個寬限期間,Envoy將繼續接受新的流。在寬限期之后,最終GOAWAY幀被發送,Envoy將開始拒絕新的流。在連接遇到空閑超時或通用服務器耗盡時都會發生排空。如果未指定此選項,則默認寬限期為5000毫秒(5秒)。
- **access_log**<br />
(optional, array) 連接管理器發出的HTTP訪問日志的配置。
- **use_remote_address**<br />
(optional, boolean) 如果設置為true,連接管理器將在確定內部和外部源以及操作各種頭部時使用客戶端連接的真實遠程地址。如果設置為false或不存在,連接管理器將使用`x-forwarded-for`HTTP頭。有關更多信息,請參閱[x-forwarded-for](../../Configurationreference/HTTPconnectionmanager/HTTPheadermanipulation.md#x-forwarded-for),[x-envoy-internal](../../Configurationreference/HTTPconnectionmanager/HTTPheadermanipulation.md#x-envoy-internal)和[x-envoy-external-address](../../Configurationreference/HTTPconnectionmanager/HTTPheadermanipulation.md#x-envoy-external-address)的文檔。
- **forward_client_cert**<br />
(optional, string) 如何處理`x-forward-client-cert`(XFCC)HTTP頭。可能的值為:
- sanitize: 不要將XFCC頭部發送到下一跳。這是默認值。
- forward_only: 當客戶端連接是mTLS(Mutual TLS)時,轉發請求中的XFCC頭。
- always_forward_only: 始終在請求中轉發XFCC標頭,而不管客戶端連接是否為mTLS。
- append_forward: 當客戶端連接是mTLS時,將客戶端證書信息附加到請求的XFCC頭并轉發它。
- sanitize_set: 當客戶端連接是mTLS時,使用客戶端證書信息重置XFCC頭,并將其發送到下一個躍點。
有關XFCC頭的格式,請參閱[x-forward-client-cert](../../Configurationreference/HTTPconnectionmanager/HTTPheadermanipulation.md#x-forward-client-cert)。
- **set_current_client_cert_details**<br />
(optional, array) 字符串列表,只有在[forward_client_cert](#forward_client_cert)為`append_forward`或`sanitize_set`且客戶端連接為`mTLS`時,此字段才有效。它指定要轉發的客戶端證書中的字段。請注意,在[x-forwarded-client-cert](../../Configurationreference/HTTPconnectionmanager/HTTPheadermanipulation.md#x-forward-client-cert)頭中,始終設置`Hash`,并在客戶端證書顯示SAN值時始終設置`By`。
- **generate_request_id**<br />
(optional, boolean) 連接管理器是否自動生成[x-request-id](../../Configurationreference/HTTPconnectionmanager/HTTPheadermanipulation.md#x-request-id)頭,如果該頭不存在。默認為true。生成一個隨機的UUID4(性能代價比較大),所以在高吞吐量的情況下,這個功能是不需要的,它可以被禁用。
### Tracing
```
{
"tracing": {
"operation_name": "...",
"request_headers_for_tags": []
}
}
```
- **operation_name**<br />
(required, string) span的名稱從`operation_name`中獲取。目前僅支持“ingress” 和 “egress”。
- **request_headers_for_tags**<br />
(optional, array) 用于為活躍的span創建頭部名稱的列表。`header`名稱用于填充`tag`名稱,`header`值用于填充`tag`值。如果指定的`header`名稱出現在請求頭中,則會創建該`tag`。
### Filters
HTTP過濾器[架構概述](../../Introduction/Architectureoverview/HTTPfilters.md)。
```
{
"name": "...",
"config": "{...}"
}
```
- **name**<br />
(required, string) 要實例化的過濾器的名稱。該名稱必須與支持的過濾器匹配。
- **config**<br />
(required, object) 指定的過濾器配置,這取決于被實例化的過濾器類型。有關更多文檔,請參閱支持的[過濾器](../../Configurationreference/HTTPfilters.md)。
## 返回
- [上一級](../Networkfilters.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跟蹤?