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

request-cookies-filter: Подробный контроль запросов с помощью cookie

Установка Debian/Ubuntu

Эти документы относятся к пакету APT nginx-module-request-cookies-filter, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте репозиторий APT, как описано в настройке репозитория APT.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-request-cookies-filter
Показать дистрибутивы и архитектуры
| Дистрибутив | Версия            | Компонент   | Архитектуры     |
|-------------|--------------------|-------------|-----------------|
| debian      | bookworm           | main        | amd64, arm64    |
| debian      | bookworm-mainline  | main        | amd64, arm64    |
| debian      | trixie             | main        | amd64, arm64    |
| debian      | trixie-mainline    | main        | amd64, arm64    |
| ubuntu      | focal              | main        | amd64, arm64    |
| ubuntu      | focal-mainline     | main        | amd64, arm64    |
| ubuntu      | jammy              | main        | amd64, arm64    |
| ubuntu      | jammy-mainline     | main        | amd64, arm64    |
| ubuntu      | noble              | main        | amd64, arm64    |
| ubuntu      | noble-mainline     | main        | amd64, arm64    |

Имя

ngx_http_request_cookies_filter_module

Модуль NGINX для подробного контроля запросов с помощью cookie.

Содержание

Статус

Этот модуль Nginx в настоящее время считается экспериментальным. Проблемы и запросы на изменения приветствуются, если вы столкнетесь с какими-либо проблемами.

Синопсис

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

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

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

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

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

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

            # Отправить отфильтрованные cookie на 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Переменные

$filtered_request_cookies

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

Пример:

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