Модификация заголовков

Содержание

Основные понятия

При получении запроса модификация заголовков позволяет изменить заголовки запроса перед его пересылкой на backend. Аналогично, при получении ответа она позволяет изменить заголовки ответа перед их возвратом клиенту.

Использование аннотаций

targetannotation key
ingressalb.ingress.cpaas.io/rewrite-request,alb.ingress.cpaas.io/rewrite-response
rulealb.rule.cpaas.io/rewrite-request, alb.rule.cpaas.io/rewrite-response

Значения аннотаций — это JSON-строки, содержащие конфигурацию.

type RewriteRequestConfig struct {
	Headers       map[string]string   `json:"headers,omitempty"`         // установить заголовок
	HeadersVar    map[string]string   `json:"headers_var,omitempty"`     // установить заголовок, значения которого — имена переменных
	HeadersRemove []string            `json:"headers_remove,omitempty"`  // удалить заголовок
	HeadersAdd    map[string][]string `json:"headers_add,omitempty"`     // добавить заголовок, значения которого могут быть множественными
	HeadersAddVar map[string][]string `json:"headers_add_var,omitempty"` // добавить заголовок, значения которого могут быть множественными и являются именами переменных
}
type RewriteResponseConfig struct {
	Headers       map[string]string   `json:"headers,omitempty"`         // установить заголовок
	HeadersRemove []string            `json:"headers_remove,omitempty"`  // удалить заголовок
	HeadersAdd    map[string][]string `json:"headers_add,omitempty"`     // добавить заголовок, значения которого могут быть множественными
}

Примечание: в картах *_var ключ — имя заголовка, а значение — имя переменной контекста ALB. Например, добавьте следующую аннотацию в Ingress:

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

добавит ключ x-my-host со значением заголовка host запроса в заголовки запроса. Вы можете обратиться к nginx variable для имен переменных.

ALB предоставляет дополнительные переменные:

имя переменнойописание
first_forward_or_remote_addrпервый адрес из заголовка Forwarded или удалённый адрес, по умолчанию remote_addr
first_forwardпервый адрес из заголовка Forwarded, по умолчанию пустая строка

Примеры

Чтобы добавить заголовок Authorization из cookie, можно использовать:

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"} }