Header Modification

目录

基本概念

当接收到请求时,header modification 允许在转发到后端之前调整请求头。 同样地,当接收到响应时,它允许在返回给客户端之前调整响应头。

使用注解

目标注解键
ingressalb.ingress.cpaas.io/rewrite-requestalb.ingress.cpaas.io/rewrite-response
rulealb.rule.cpaas.io/rewrite-requestalb.rule.cpaas.io/rewrite-response

注解值是包含配置的 JSON 字符串。

type RewriteRequestConfig struct {
	Headers       map[string]string   `json:"headers,omitempty"`         // 设置 header
	HeadersVar    map[string]string   `json:"headers_var,omitempty"`     // 设置 header,值为变量名
	HeadersRemove []string            `json:"headers_remove,omitempty"`  // 移除 header
	HeadersAdd    map[string][]string `json:"headers_add,omitempty"`     // 添加 header,值可以是多个
	HeadersAddVar map[string][]string `json:"headers_add_var,omitempty"` // 添加 header,值可以是多个且为变量名
}
type RewriteResponseConfig struct {
	Headers       map[string]string   `json:"headers,omitempty"`         // 设置 header
	HeadersRemove []string            `json:"headers_remove,omitempty"`  // 移除 header
	HeadersAdd    map[string][]string `json:"headers_add,omitempty"`     // 添加 header,值可以是多个
}

注意:在 *_var 映射中,键是 header 名称,值是 ALB 上下文变量名。 例如,向一个 Ingress 添加如下注解:

alb.ingress.cpaas.io/rewrite-request: '{
    "headers_var": {
        "x-my-host": "http_host"
    }
}'

将会添加键为 x-my-host,值为请求的 host header 的请求头。 你可以参考 nginx variable 获取变量名。

ALB 提供了额外的变量:

变量名描述
first_forward_or_remote_addr第一个转发地址或远程地址,默认是 remote_addr
first_forward第一个转发地址,默认是空字符串

示例

要从 cookie 中添加 Authorization 头,可以使用:

alb.ingress.cpaas.io/rewrite-request: '{"headers_var":{"Authorization":"cookie_auth_token"}}'

要设置 HSTS,可以使用:

alb.rule.cpaas.io/rewrite-response: |
    { "headers": { "Strict-Transport-Security": "max-age=63072000; includeSubDomains; preload"} }