Модуль ngx_mail_limit_conn_module
Пример конфигурации Директивы limit_conn limit_conn_dry_run limit_conn_log_level limit_conn_zone |
Модуль ngx_mail_limit_conn_module
(1.29.0)
позволяет ограничить число соединений по заданному ключу,
в частности, число соединений от одного аутентифицированного пользователя.
Соединения ограничиваются после аутентификации, так что в качестве ключа может использоваться имя пользователя, возвращённое сервером аутентификации, а также произвольные поля заголовка ответа сервера аутентификации.
Пример конфигурации
mail { limit_conn_zone $remote_user zone=user:10m; ... server { ... limit_conn user 10; } }
Директивы
Синтаксис: |
limit_conn |
---|---|
Умолчание: | — |
Контекст: |
mail , server |
Задаёт зону разделяемой памяти и максимально допустимое число соединений для одного значения ключа. При превышении этого числа сервер вернёт ошибку и закроет соединение. Например, директивы
limit_conn_zone $remote_user zone=user:10m; server { limit_conn user 5;
разрешают одновременно обрабатывать не более пяти соединений от одного аутентифицированного пользователя.
Следует иметь в виду, что не все почтовые клиенты поддерживают используемые коды ответов, и могут предложить пользователю повторно ввести пароль. Поэтому не рекомендуется устанавливать слишком низкие ограничения, легко достижимые корректно ведущими себя почтовыми клиентами.
Директив limit_conn
может быть несколько.
Например, следующая конфигурация ограничивает число соединений
от одного пользователя и в то же время ограничивает число соединений
для всех пользователей в домене, возвращённом сервером аутентификации:
limit_conn_zone $remote_user zone=user:10m; limit_conn_zone $auth_http_domain zone=domain:10m; server { ... limit_conn user 5; limit_conn domain 100; }
Директивы наследуются с предыдущего уровня конфигурации при условии, что
на данном уровне не описаны свои директивы limit_conn
.
Синтаксис: |
limit_conn_dry_run |
---|---|
Умолчание: |
limit_conn_dry_run off; |
Контекст: |
mail , server |
Включает режим пробного запуска. В данном режиме число соединений не ограничивается, однако в зоне разделяемой памяти текущее число избыточных соединений учитывается как обычно.
Синтаксис: |
limit_conn_log_level
|
---|---|
Умолчание: |
limit_conn_log_level error; |
Контекст: |
mail , server |
Задаёт желаемый уровень записи в лог случаев ограничения числа соединений.
Синтаксис: |
limit_conn_zone
|
---|---|
Умолчание: | — |
Контекст: |
mail |
Задаёт параметры зоны разделяемой памяти, которая хранит состояние для разных значений ключа. Состояние в частности содержит текущее число соединений.
В качестве ключа можно использовать:
$remote_addr
- адрес клиента
$remote_user
- имя пользователя, использованное для аутентификации
$auth_http_
имя
- произвольное поле заголовка ответа сервера аутентификации; последняя часть имени переменной соответствует имени поля, приведённому к нижнему регистру, с заменой символов тире на символы подчёркивания
Запросы с пустым значением ключа не учитываются.
Пример использования:
limit_conn_zone $remote_user zone=user:10m;
Здесь в качестве ключа используется имя пользователя.
Размер состояния на 32-битных платформах равен 32 байтам для ключей длиной до 12 байт включительно, и 64 байтам для ключей от 13 до 44 байт. Размер состояния на 64-битных платформах равен 64 байтам для ключей длиной до 28 байт включительно. В зоне размером 1 мегабайт может разместиться около 32 тысяч состояний размером 32 байта или 16 тысяч состояний размером 64 байта. При переполнении зоны сервер вернёт ошибку и закроет соединение.