Header 操作
Envoy 的 HTTP Connection Manager(HCM)支持在不同层级(全局、虚拟主机、路由、加权集群)对请求和响应头进行添加、移除和修改。常见用途包括:
- 添加追踪、认证、调试等自定义头
- 移除敏感或无用头
- 动态插入变量(如客户端 IP、时间戳等)
配置方法
可用字段:
request_headers_to_add
/request_headers_to_remove
response_headers_to_add
/response_headers_to_remove
支持变量插值,如 %DOWNSTREAM_REMOTE_ADDRESS%
、%START_TIME%
等。
注意:部分伪头(如
:authority
、:scheme
、host
)不可直接配置修改。
配置优先级:加权集群 < 路由 < 虚拟主机 < 全局。高层级可覆盖低层级。
典型配置示例
route_config:
response_headers_to_add:
- header:
key: "lab"
value: "3"
virtual_hosts:
- name: vh_1
request_headers_to_add:
- header:
key: vh
value: "one"
domains: ["*"]
routes:
- match:
prefix: "/json"
route:
cluster: single_cluster
response_headers_to_add:
- header:
key: "json"
value: "%REQ(hello)%"
- match:
prefix: "/"
route:
cluster: single_cluster
请求 /json
且带 hello: world
头时,响应会包含 json: world
和 lab: 3
头。
常见头部说明
x-request-id
:唯一请求标识,便于追踪x-forwarded-for
:记录经过的客户端 IPx-envoy-internal
/x-envoy-external-address
:区分内外部请求
更多变量和头部详见 官方文档。
实践建议
- 头部操作常用于链路追踪、灰度发布、A/B 测试、流量治理等场景
- 注意头部覆盖顺序,避免无效或冲突
- 谨慎处理敏感头,防止信息泄露