Перейти к содержанию

request-cookies-filter: Тонкая настройка управления куками запросов

Установка

Вы можете установить этот модуль в любой дистрибутив на базе RHEL, включая, но не ограничиваясь:

  • RedHat Enterprise Linux 7, 8, 9 и 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 и Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-request-cookies-filter
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-request-cookies-filter

Включите модуль, добавив следующее в верхнюю часть файла /etc/nginx/nginx.conf:

load_module modules/ngx_http_request_cookies_filter_module.so;

Этот документ описывает nginx-module-request-cookies-filter v0.1.0, выпущенный 6 января 2026 года.


Синопсис

http {
    server {
        listen 80;
        server_name example.com;

        location / {
            # Если кука с именем "a" существует, установите ее значение в 1. В противном случае добавьте куку с именем "a" и значением 1.
            set_request_cookie a 1;

            # Если кука с именем "b" существует, ничего не делайте. В противном случае добавьте куку с именем "a" и значением 1.
            add_request_cookie b 2;

            # Если кука с именем "c" существует, установите ее значение в 3. В противном случае ничего не делайте.
            modify_request_cookie c 3;

            # Если кука с именем "d" существует, удалите ее. В противном случае ничего не делайте.
            clear_request_cookie d;

            # Условная фильтрация. Действует только если переменная $http_a не пуста или не равна '0'.
            set_request_cookie e 4 if=$http_a;

            # Отправьте отфильтрованные куки на upstream.
            proxy_set_header Cookie $filtered_request_cookies;

            proxy_pass http://127.0.0.1:8080;
        }
    }
}

Директивы

Синтаксис: set_request_cookie cookie_name value [if=condition];

По умолчанию:

Контекст: http, server, location

Устанавливает значение куки. Если кука уже существует, она будет изменена.

Имена куков чувствительны к регистру, как указано ниже.

Синтаксис: add_request_cookie cookie_name value [if=condition];

По умолчанию:

Контекст: http, server, location

Добавляет новую куку. Если кука уже существует, операция игнорируется.

Синтаксис: modify_request_cookie cookie_name value [if=condition];

По умолчанию:

Контекст: http, server, location

Изменяет значение существующей куки. Если кука не существует, операция игнорируется.

Синтаксис: clear_request_cookie cookie_name [if=condition];

По умолчанию:

Контекст: http, server, location

Удаляет куку из заголовков запроса.

Переменные

$filtered_request_cookies

Строка отфильтрованных куков, разделенная точкой с запятой. Содержит финальную строку куков после применения всех правил фильтрации. Если правила фильтрации не применяются, переменная содержит оригинальную строку куков, как $http_cookie.

Пример:

location / {
    set_request_cookie user "test_user";
    add_request_cookie theme "dark";
    # будет "user=test_user; theme=dark", если запрос не содержит никаких куков.
    proxy_set_header Cookie $filtered_request_cookies;
    proxy_pass http://backend;
}

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-request-cookies-filter.