Модификация заголовков запросов и ответов#

Одной из часто выполняемых операций является модификация, а также контроль передачи заголовков как по направлению от клиента к 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

Ожидаемое поведение в данной конфигурации следующее:

  1. В исходные заголовки запроса добавлен заголовок X-Client-Address со значением переменной $remote_addr, содержащей ip адрес клиента, при этом заголовок X-Client-Clear будет удален, присвоив ему пустое значение.

  2. Перед проксированием на backend, добавим в заголовки запроса заголовок Income-Service-Name, в который помещается значение имени сервиса (указано в директиве name данного сервиса).

  3. Перед отправкой ответа клиенту добавляем заголовок X-Back-Address, в который помещаем значение переменной $upstream_real_server_name, содержащей ip-адрес backend, куда был отправлен запрос и очищаем заголовок X-Out.