Модификация заголовков запросов и ответов#
Одной из часто выполняемых операций является модификация, а также контроль передачи заголовков как по направлению от клиента к backend-серверу, так и в обратном направлении.
Для выполнения этих действий в секции modifiers сервиса используются директивы, описанные в разделе "Параметр modifiers".
set_input_headers - установка, модификация и удаление заголовков запроса (до проксирования)
set_headers - установка, модификация и удаление заголовков запроса (перед передачей на backend) - используется в тех случаях, когда отсутствует проксирование, необходимо сгенерировать заголовок для его обработки заголовками запросов до отправки на backend, для фиксации в логах события на фазе client_request.
set_output_headers - установка, модификация и удаление заголовков в ответе клиенту.
Добавим в профиль proxy_use_main сервис со следующим описанием:
- id: 3
name: service_3
url: ^/changeHeaders
upstream_group_id: back_1
use_main_upstream_groups: true
allowed_queries:
- method: get
modifiers:
set_input_headers:
- headers:
- X-Client-Address $remote_addr
- X-Client-Clear ""
set_output_headers:
- headers:
- X-Back-Address $upstream_real_server_name
- X-Out ""
set_header:
- Income-Service-Name $service_name
Ожидаемое поведение в данной конфигурации следующее:
В исходные заголовки запроса добавлен заголовок X-Client-Address со значением переменной $remote_addr, содержащей ip адрес клиента, при этом заголовок X-Client-Address будет удален, присвоив ему пустое значение.
Перед проксированием на backend, добавим в заголовки запроса заголовок Income-Service-Name, в который помещается значение имени сервиса (указано в директиве name данного сервиса).
Перед отправкой ответа клиенту добавляем заголовок X-Back-Address, в который помещаем значение переменной $upstream_real_server_name, содержащей ip-адрес backend, куда был отправлен запрос и очищаем заголовок X-Out.