Nginx - Советы по управлению скоростью загрузки/загрузки
Nginx - Советы по управлению скоростью загрузки/загрузки

Обзор

Ограничение скорости — это эффективный механизм защиты системы, который снижает потенциальное давление и риски путем контроля входного и выходного потока системы. Когда веб-сайт работает в среде общедоступной сети, система может столкнуться с риском перегрузки из-за обычного доступа пользователей, веб-сканеров, злонамеренных атак или внезапного большого трафика, что приводит к задержкам ответа или даже сбоям системы.

В ответ на эту ситуацию технология ограничения тока может эффективно управлять одновременными запросами и обеспечивать стабильную работу системы. Ограничивая часть запросов, например, ограничивая частые запросы с одного и того же IP-адреса, система может разумно распределять ресурсы и гарантировать, что сервер сможет правильно реагировать на другие запросы.

Nginx предоставляет два основных метода ограничения тока: один — ограничение тока: ставку,Другой Ограничить количество подключенийколичество。также,Nginx также поддерживает ограничение скорости загрузки и выгрузки.,Стабильность и безопасность системы дополнительно повышаются.


Запросить ставку

nginx из ngx_http_limit_req_module Модуль реализует функцию ограничения скорости обработки запросов и использует алгоритм дырявого ведра (leaky Bucket). bucket algorithm)。

Этот алгоритм можно образно описать как ведро, в которое вода непрерывно поступает сверху и вытекает с постоянной скоростью снизу. Если количество воды в ведре превышает определенный предел, новая вода будет отклонена или выброшена.

При обработке сетевых запросов,Бочку можно рассматривать как поворот,Вода представляет собой запрос клиента. когда поступит запрос,Если в ведре еще достаточно места,Запрос будет принят и передан на обработку. но,Если очередь заполнена,Тогда новый запрос будет временно отклонен или отброшен.,Пока не будет достаточно места для приема новых запросов. Этот метод может эффективно контролировать скорость обработки запросов к серверу.,Предотвратите перегрузку сервера из-за слишком большого количества запросов.

limit_req_zone

nginx Есть два основныхиз Инструкции можно использовать Конфигурация Ограничение тока:limit_req_zone и limit_req

Давайте посмотрим демо

Язык кода:javascript
копировать
limit_req_zone $binary_remote_addr zone=artisan:10m rate=2r/s;

server {
    location / {
        limit_req zone=artisan;
    }
} 

limit_req_zone используется для установки текущего ограничения и параметров области общей памяти.,Формат::limit_req_zone key zone rate

limit_req_zone даnginxсерединаизинструкция,Используется для запроса ограничения тока и связанных с ним параметров для конфигурации.,В основном это объекты, ограничивающие ток, области общей памяти и максимальные скорости доступа.

поддаверноlimit_req_zoneЧасти инструкцииизпредставлять:

  • ключ (текущий объект ограничения): этот параметр определяет текущий объект ограничения, то есть источник ограниченного запроса. В примере использован binary_remote_addr означает ограничение потока на основе IP-адреса клиента. из-за использованияbinary_remote_addrи НетдаRemote_addr предназначен для уменьшения потребления памяти. потому чтоremote_addrиз РазмерIPv4случайда7приезжать15Байты различаются,и
  • зона (область общей памяти):Этот параметр определяет общую область памяти для хранения информации о доступе.,Включая каждый IP-адрес со статусом и URL-адресом запроса с ограниченным доступом, частотой и т. д. В примере,artisan:10mпредставляет собой размер10M,Имяartisanизобщая область памяти。nginxвстречасуществоватьэта областьсередина Записыватьпроситьиздоступ к информации,чтобы ограничить ток. Когда необходимо сохранить новые записи,nginx очистит старые записи в соответствии с определенными политиками,чтобы освободить место.

1M Может хранить 16 000 IP Информация об адресах и доступе, ремесленник, вероятно, может хранить около 160 000 адресов. nginx Создать новую записьизкогда,Записи, которые не использовались в течение предыдущих 60 секунд, будут удалены.,Если пространство освобождено, новые записи не могут быть сохранены.,Будет возвращен код состояния 503из. По умолчанию возвращает 503,Если вы хотите изменить возвращаемое значение,Можно установитьlimit_req_status

  • скорость (максимальная скорость доступа):Этот параметр устанавливает максимальнуюизскорость доступа。существовать Примерсередина,rate=2r/sУказывает максимальную обработку в секунду2запросы。на самом деле,nginx отслеживает запросы с точностью до миллисекунды,Таким образом, эта установка фактически обрабатывает 1 запрос каждые 500 миллисекунд. Если скорость поступления запросов превышает этот предел,Так избыточноиззапрос возможенбудет отклонения или задержка обработки.

Приведенный выше пример просто указывает зона=ремесленник, что указывает на использование artisanэта областьиз Конфигурация。Мы можем понять, что в настоящее время это ведро не хранит капель воды.изспособность,приезжатьдостигатьиз Ничего нельзя слить сразуиз Запросить всебудет отклонен。Если я отправлю 10 запросов за 1 секунду,Среди них первые 500 миллисекунд являются один раз.,9 раз через 500 миллисекунд,Тогда будут отвечать только первые 500 миллисекунд запроса и последние 500 миллисекунд первого запроса.,остальные Запросить всебудет отклонен


limit_req

limit_req_zoneинструкциядля установки Ограничение токаизпараметр,Но он сам по себе не применяет существующие ограничивающие правила. Чтобы действующие ограничивающие правила вступили в силу,Его также необходимо использовать в сочетании сlimit_reqинструкция,Воляlimit_req_zoneопределениеиз Ограничение тока Региональное применениеприезжатьспецифическийизпроситьиметь дело ссередина。

limit_req Это команда, используемая в nginx для применения правил ограничения тока запроса. Ее формат:

Язык кода:javascript
копировать
limit_req zone=name [burst=number] [nodelay];

Ниже приводится описание каждой части параметров:

  • zone:этотпараметр Прежде чем указатьиспользоватьlimit_req_zoneинструкцияопределениеиз Ограничение токаобластьизимя。существовать Конфигурациясередина,использоватьzone=nameВолясоответствующийиз Ограничение тока Региональное применениеприезжатьтекущийизlimit_reqправилосередина。
  • burst:этотданеобязательныйпараметр,Используется для установки максимально допустимого количества пакетных запросов. По умолчанию,Когда запросы превышают установленную скорость,nginx поместит избыточные запросы в очередь для обработки,прямойприезжатьочередьполный или взрывнойпросить数достигатьприезжатьверхний предел。наборburstпараметрназад,nginx позволит определенному количеству запросов превысить лимит,Пока не будет достигнуто установленное количество пакетных запросов. Например,burst=10Указывает, что разрешена максимальная одновременная обработка.10превышает лимитизпросить。
  • nodelay:этот也данеобязательныйпараметр,Используется для указания, включать ли режим без задержек. По умолчанию,Когда запрос превышает лимит,nginx поместит запрос в очередь на обработку,прямойприезжатьочередьпока не будет места。включеноnodelayпараметрназад,nginx немедленно отклонит запросы, превышающие лимит.,Вместо того, чтобы положить его в очередь, ожидая обработки. Этот режим уменьшает задержку,Однако некоторые запросы могут быть полностью отклонены.

проходитьиспользоватьlimit_reqинструкция,Вы можете применить ранее определенную область ограничения тока для обработки конкретного запроса.,отивыполнитьвернопроситьиз Ограничение токаконтроль。


взрывной трафик

Действительно,Для ситуаций, когда возникает внезапное движение транспорта,Использование исключительно фиксированной ставки для ограничения запросов может привести к тому, что некоторые запросы будут полностью отклонены.,Вместо того, чтобы полностью использовать ресурсы сервера. Чтобы справиться с пиковым трафиком,Можетиспользовать burst параметрразрешить определенное количествоколичествоизпросить Превышено значениеизпредел,Это может смягчить воздействие пакетного трафика на систему.,В то же время контроль ограничения потока запросов по-прежнему сохраняется.

Например, мы можем настроить limit_req Команда из формата, добавить burst Параметры достижения этой цели:

Язык кода:javascript
копировать
limit_req zone=name burst=20;

В этом примере, в дополнение к использованию ранее определенной области ограничения тока name,возвращатьсянабор burst=20,Указывает, что максимальное количество пакетных запросов, которые разрешено обрабатывать одновременно, равно 20. так,Когда поступает всплеск трафика,nginx сначала позволит определенному количеству запросов превысить установленную скорость.,Пока не будет достигнуто установленное максимальное количество пакетных запросов.,Далее продолжайте движение с заданной скоростью.

корректируя burst параметр,Вы можете гибко запрашивать текущую стратегию ограничения в соответствии с реальной ситуацией.,Может справиться с внезапным трафиком,Это также может защитить ресурсы сервера от чрезмерного потребления.


Продолжая предыдущий пример:

Язык кода:javascript
копировать
limit_req_zone $binary_remote_addr zone=test:10m rate=2r/s;

server {
    location / {
        limit_req zone=test burst=5;
    }
} 

burst Указывает количество дополнительных запросов, которые могут быть обработаны после превышения установленной скорости доступа. когда rate=2r/s время с указанием каждые 500 мс Может обработать запрос

При взрыве = 5, если одновременно поступает 10 запросов, nginx Первый запрос будет обработан. Среди оставшихся 9 запросов 5 будут размещены поочередно, а остальные 4 запроса будут напрямую отклонены.

Затем каждые 500 мс получайте запрос на обработку.,В настоящее время, если позже поступят дополнительные запросы,,Если количество запросов в свою очередь превышает 5,будет отклонен,Если оно меньше 5 из, то он будет добавлен в очередь на ожидание. Мы можем понять, что теперь в ведре может храниться 5 капель воды:

Nodelay не задерживает

Конфигурация burst После этого, хотя все запросы, приходящие одновременно, не будут отклонены, вам все равно придется подождать 500мс. Одно время обработки помещено в корзину, пятый запрос должен ждать 500 мс. * Обработка занимает 4 секунды. Более длительное время ожидания означает потерю пользователя. Во многих случаях такое время ожидания неприемлемо. На этом этапе нам нужно добавить nodelay Параметры, и burst используются вместе.

Язык кода:javascript
копировать
limit_req_zone $binary_remote_addr zone=test:10m rate=2r/s;

server {
    location / {
        limit_req zone=test burst=5 nodelay;
    }
} 

nodelay Указывает на отсутствие задержки. настраивать nodelay назад,Первый поступивший запрос и последующий запрос будут обработаны немедленно.,Ожидания запросов не будет.

Следует отметить, что из,Хотя запросы очередисерединаиз5 были обработаны сразу,нодаочередьсерединаиз Позиция остается прежнейдав соответствии с500ms из скорости высвобождается из поворота. Следующие 4 запроса по-прежнему отклоняются, что не приведет к увеличению верхнего предела пропускной способности в долгосрочной перспективе. Верхний долгосрочный предел пропускной способности устанавливается пользователем. rate Решите из.

поэтому,Эти параметры необходимо устанавливать в соответствии с фактическими потребностями и нагрузкой на систему.,Для достижения наилучшей производительности и удобства использования.


Установите белый список через ngx_http_geo_module и ngx_http_map_module

проходитьиспользоватьnginxизngx_http_geo_moduleиngx_http_map_moduleмодуль,Возможна настройка белого списка,То есть на некоторые IP-адреса не влияют ограничения трафика.,оти Отменить этиIPадресизпросить Ограничение токанастраивать。

Вот простой пример конфигурации:

Язык кода:javascript
копировать
geo $limit {
    default 1;  # По умолчанию все IP-адреса подвергаются регулированию.
    10.0.0.1/32 0;  # На IP-адреса в белом списке не влияют ограничения трафика
    192.168.1.0/24 0;
}

map $limit $limit_key {
    1 "";
    0 $binary_remote_addr;
}

limit_req_zone $limit_key zone=artisan:10m rate=2r/s;

server {
    location / {
        limit_req zone=artisan burst=5 nodelay;
        # другой Конфигурация...    }
}

В этой конфигурации:

  • geo блок используется для определения блока с именем $limit изпеременная, переменная определяет, следует ли ограничивать влияние трафика на основе запроса изIP-адреса. По умолчанию регулирование затрагивает все IP-адреса, но IP-адреса в белом списке не затрагиваются.
  • map блокировать будет Предельная переменная отображается какlimit_key переменная。когда limit Если значение из равно 1, это означает, что его нет в белом списке и он будет использоваться. binary_remote_addr (IP-адрес клиента) используется в качестве значения ключа текущей области ограничения;
  • limit_req_zone Инструкции на основе $limit_key переменная для определения области ограничения потока. IP-адреса в белом списке не будут затронуты ограничением трафика, поэтому они не будут помещены в зону ограничения трафика.

Через эту из Конфигурация,Можно отменить текущие настройки ограничения для IP-адресов в белом списке.,отисуществовать需要时верноидентификацияIPВыполните испытание давлением илидругойдействоватьи Нет受предел。


Несколько правил limit_req

В этом примере конфигурации определены два правила. mylimit и myLimit2,соответственно для разныхиз Ограничение тока Стратегия。проходитьиспользовать geo и map модуль,Вы можете решить, будет ли на вас влиять ограничение трафика, в зависимости от источника запроса.,оти Реализовать функцию белого списка。

Конкретные детали заключаются в следующем:

Язык кода:javascript
копировать
geo $limit {
    default 1;            # По умолчанию все IP-адреса подвергаются регулированию.
    10.0.0.0/8 0;         # На IP-адреса в белом списке не влияют ограничения трафика
    192.168.0.0/24 0;
}

map $limit $limit_key {
    0 "";                 # существовать На IP-адреса в белом списке не влияют ограничения трафика
    1 $binary_remote_addr; # IP-адрес отсутствует в белом списке и использует двоичный удаленный адрес в качестве текущего ключа ограничивающей области.
}

limit_req_zone $limit_key zone=mylimit:10m rate=2r/s;    # Определить области ограничения потока mylimit, ставка 2р/с
limit_req_zone $binary_remote_addr zone=myLimit2:10m rate=10r/s;  # Определить области ограничения потока myLimit2, ставка 10р/сек.

server {
    location ~* \.(html)$ {
        limit_req zone=mylimit burst=5 nodelay;    # Для IP-адресов, которых нет в белом списке, используйте mylimit правила, ограниченные 2r/s
        limit_req zone=myLimit2 burst=5 nodelay;   # Для всех IP-адресов, независимо от того, находятся они в белом списке или нет, используйте myLimit2 правила, ограниченные 10r/s
    }
}

В этой конфигурации,Для IP-адресов в белом списке,потому что оно соответствуетприезжать Понятно myLimit2 правил, поэтому она ограничена 10р/с. IP-адреса, которых нет в белом списке, должны сопоставляться одновременно. mylimit и myLimit2 Два правила, и самым строгим условием из двух является mylimit из2r/s,поэтомубудет работать。

Этот метод позволяет гибко управлять текущим потоком запросов в различной степени в зависимости от источника запроса, чтобы удовлетворить потребности различных сценариев.


Ограничить количество подключений

nginxизngx_http_limit_conn_moduleмодульпоставлять Понятно Ограничить количество подключенийиз Функция,в Содержит два ключаинструкция:limit_conn_zoneиlimit_conn。этот两个инструкцияиз Форматы:limit_conn_zone key zone。

limit_conn_zone

  • limit_conn_zone: эта команда используется для установки количества соединений, параметров ограничения и области общей памяти. в,ключ представляет объект ограничения,зона представляет собой общую область памяти. В заданной области памяти,nginx будет хранить информацию о количестве подключений,с целью введения ограничений.

limit_conn

  • limit_conn: эта команда используется для установки правила ограничения количества подключений в определенном месте (например, на сервере или месте). Указав текущую область ограничения и верхний предел количества подключений, вы можете контролировать количество подключений, которые конкретный объект (например, IP-адрес или виртуальный хост) удерживает или обрабатывает одновременно.

Эталонная конфигурация

Язык кода:javascript
копировать
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;

server {
    location ~* \.(html)$ {
        limit_conn perip 10;
        limit_conn perserver 100;
    }
}
  • limit_conn_zone binary_remote_addr Zone=perip:10m: Эта команда устанавливаетbinary_remote_addrдляпределверно象,То есть один IP-адрес может одновременно поддерживать до 10 подключений.,И сохраните эту информацию в общей области памяти под названием перипиз10М.
  • limit_conn_zone имя_сервера Zone=Perserver:10m: Эта команда устанавливает следующие параметры:server_nameдляпределверно象,То есть общее количество одновременных подключений, которые может одновременно обрабатывать виртуальный хост (сервер), ограничено 100.,И сохраните эту информацию в общей памяти размером 10 МБ под названием perserveriz.

существовать Конфигурацияизserverкусоксерединаизlocationчасть,проходитьlimit_connинструкция Воляидентификацияиз Количество соединенийпределправило应用приезжатьсоответствующийизпроситьиметь дело ссередина。Через эту из Конфигурация,Может эффективно контролировать количество подключений к конкретным объектам,Предотвратите чрезмерную нагрузку на сервер или снижение производительности из-за чрезмерных подключений.


Ограничения скорости загрузки/выгрузки

limit_rate в основном используется для ограничения количества байтов, передаваемых между пользователями и серверами.,Обычно используется в таких сценариях, как ограничение скорости загрузки/отдачи. Эта функция не является отдельным модулем,идасуществоватьngx_http_core_moduleмодульсерединавыполнитьиз。Связанныйинструкциявключатьlimit_rateиlimit_rate_after,Используется для контроля ограничения скорости согласно политике.

limit_rate

Команда limit_rate используется для установки ограничения скорости соединения. Установив директиву limit_rate в файле конфигурации.,и укажите, что вы хотите ограничить ставку,Вы можете контролировать скорость передачи данных по соединению. Эта ставка может быть фиксированным значением,Вы также можете динамически регулировать значение из по мере необходимости.

Язык кода:javascript
копировать
server {
    location / {
        limit_rate 4k;
    }
} 
  • Единица по умолчанию — байт/с.,То естьда Передачи в секундуиз Количество байтовBytesи Нетда Количество битbits
  • ставка может быть установлена ​​на переменную,отиможет быть достигнуто Динамическое ограничение скорости
  • Действующий диапазон директивы по ограничению скорости определяется на основе каждого соединения.,Например, приведенное выше ограничивает скорость каждого соединения до 4k.,То есть, когда клиент инициирует два соединения,,Ставку можно изменить на 8 тыс.

limit_rate_after

Директива limit_rate_after используется для установки количества байтов в начальной части ответа, на которую не распространяются ограничения скорости. Обычно используется, чтобы ограничение скорости не влияло на передачу заголовков ответов или другой важной информации. После установки limit_rate_after политика ограничения скорости не начнет применяться до тех пор, пока не будет достигнуто указанное количество байтов.

Язык кода:javascript
копировать
server {
    location / {
        limit_rate_after 500k;
        limit_rate 4k;
    }
} 

limit_rate_afterинструкцияпозволятьсуществовать传输Понятно一部分数据之назадснова ограничение скорости,Это может справиться с некоторыми конкретными сценариями.,Например, сегментированное ограничение скорости загрузки или контроль пропускной способности веб-сайта потокового видео.

Например,в конфигурации,еслинаборlimit_rate_after 500k,Это означает, что политика ограничения скорости не будет активирована до тех пор, пока не будет передано 500 КБ данных. Это гарантирует, что на вас не повлияет ограничение скорости при запуске перевода.,Начальная скорость передачи гарантируется и после передачи определенного объема данных;,Затем ограничьте скорость по мере необходимости.,для контроля потребления полосы пропускания.

Эта конфигурация особенно полезна на веб-сайтах с сегментированным ограничением скорости загрузки или потоковым видео. на сайтах потокового видео,Чтобы обеспечить удобство использования,Обычно на первом экране ограничения скорости нет.,чтобы его можно было загрузить как можно быстрее. Подождите, пока пользователь не начнет смотреть видео,Затем ограничьте пропускную способность до разумного диапазона.,Это сделано для снижения дополнительных затрат, вызванных предварительной загрузкой слишком большого количества контента из-за слишком высокой скорости клиентской сети.

проходить Разумный Конфигурацияlimit_rate_afterинструкция,Можно добиться более гибкой стратегии ограничения скорости.,В то же время это обеспечивает лучший пользовательский опыт и эффективное использование сетевых ресурсов.

Суммируя,При разумной конфигурации эти две инструкции,Может реализовать контроль ограничения скорости по количеству байтов, передаваемых между пользователями и серверами.,тем самым защищая ресурсы сервера,Оптимизируйте пользовательский опыт.


proxy_limit_rate

proxy_limit_rate — это команда, используемая в Nginx для управления скоростью запросов, отправляемых на внутренний прокси-сервер. Когда Nginx действует как обратный прокси,Он может отправлять много запросов на внутренний сервер.,если не ограничено,Это может привести к перегрузке внутреннего сервера или потреблению ненужных ресурсов.

С помощью директивы proxy_limit_rate,Может ограничивать скорость запросов, отправляемых на внутренний сервер.,Чтобы предотвратить чрезмерную нагрузку на внутренний сервер. Это поможет вам сбалансировать нагрузку между обратными прокси-серверами и внутренними серверами.,Обеспечить стабильность и надежность системы.

Синтаксис proxy_limit_rateиз следующий:

Язык кода:javascript
копировать
proxy_limit_rate rate;

в,ставка — число, обозначающее ставку из,Это может быть число с единицей измерения,Например, 1к, 1м,Указывает объем данных, отправляемых в секунду.

Например,Если вы хотите ограничить скорость запросов к внутреннему серверу до 100 КБ в секунду,Это может быть так. Конфигурация:

Язык кода:javascript
копировать
proxy_limit_rate 100k;

Следует отметить, что из,Директива proxy_limit_rate применяется только к ситуациям обратного прокси HTTP и HTTPS.,Для других протоколов (таких как FastCGI и т. д.),Возможно, вам придется использовать разные инструкции для достижения аналогичных функций.

Основной принцип и использование proxy_limit_rate почти такие же, как и limit_rate, с той лишь разницей, что proxy_limit_rate ограничивает скорость соединения между внутренними серверами nginx, а limit_rate ограничивает скорость соединения между клиентами nginx. Следует отметить, что команда proxy_limit_rate должна быть включена, чтобы команда proxy_buffering вступила в силу.

Язык кода:javascript
копировать
#грамматика:
Синтаксис: скорость proxy_limit_rate;
По умолчанию: proxy_limit_rate 0;
Контекст: http, сервер, местоположение.
Эта директива появилась в версии 1.7.7.

кроме того,proxy_limit_rate ограничивает только скорость запросов, отправляемых на внутренний сервер.,Это не влияет на скорость ответов, полученных от внутреннего сервера. Если вам нужно ограничить скорость получения ответов,Этого можно добиться с помощью таких инструкций, как proxy_set_header и limit_rate_after.


Динамическое ограничение скорости

Nginxизlimit_rateинструкция Может与переменнаяиmapинструкцияждатьобъединитьиспользовать,Тем самым реализуя функцию Динамическое ограничение скорости. Эта комбинация может динамически регулировать скорость отправки ответа на основе определенных атрибутов или условий запроса.,Делает ограничение скорости более гибким и интеллектуальным.

Приведите пример,Можетиспользоватьmapинструкцияопределениеотображение,Сопоставьте запросы с различными значениями ограничения скорости на основе конкретных атрибутов запроса (таких как IP-адрес клиента, путь запроса и т. д.). Затем,Воляэтот映射结果作дляпеременнаяперешел кlimit_rateинструкция,отивыполнить Динамическое ограничение скорости。

Вот простой пример, предполагающий, что вы хотите установить Динамическое ограничение скорости на основе запроса по пути:

Язык кода:javascript
копировать
map $request_uri $limit_rate {
    default         1m;  # Ограничение скорости по умолчанию составляет 1 МБ/с.
    /images/        500k;  # Ограничение скорости для запросов по пути /images/ составляет 500 КБ/с.
    /videos/        2m;   # Ограничение скорости для запросов по пути /videos/ составляет 2 МБ/с.
}

server {
    ...
    location / {
        limit_rate $limit_rate;
        ...
    }
    ...
}

В этом примере,MapИнструкции на основе запроса изURI сопоставляют запросы с различными предельными значениями скорости,Однаконазад Воляэтот些限速值赋给переменнаяlimit_rate. В блоке сервера излокация Конфигурация используйте директиву limit_rate дляlimit_rateпеременная Применяется к настройкам ограничения скорости.,отивыполнить Понятно根据проситьпуть Динамическое ограничение скоростииз Функция。

таким образом,Вы можете выбирать в соответствии с различными потребностями и сценариями.,Гибкая настройка скорости отправки запросов,Для достижения лучшей производительности и использования ресурсов.

основанный на времени Динамическое ограничение скорости

использоватьNginxизssiмодульсерединапоставлятьизвремяпеременнаяи регулярные выражения,объединитьmapинструкцияи Настройка ограничения скорости,Реализуйте функцию динамической регулировки ограничения скорости в зависимости от разных периодов времени.

Предположим, мы хотим установить разные ограничения скорости днем ​​и ночью, мы можем выполнить следующие шаги:

  1. первый,использоватьssiмодульсерединапоставлятьиз$date_localпеременная获取текущий本地время。
  2. Используйте регулярные выражения, чтобы определить, является ли текущее время дневным или ночным.
  3. В сочетании с командой карты разные периоды времени сопоставляются с разными значениями ограничения скорости на основе результатов сопоставления.
  4. Используйте эти значения ограничения скорости как переменную.перешел кlimit_rateинструкция,выполнить Динамическое ограничение скорости。

Вот простой пример конфигурации Nginx:

Язык кода:javascript
копировать
map $date_local $limit_rate {
    ~* "^\d{4}-\d{2}-\d{2} 0[8-1]\d:\d{2}:\d{2}"  1m;  # С 8:00 до 13:00 установите ограничение скорости 1 МБ/с.
    default                                       500k; # В другие периоды времени устанавливайте ограничение скорости на уровне 500 КБ/с.
}

server {
    ...
    location / {
        ssi on;
        limit_rate $limit_rate;
        ...
    }
    ...
}

В этом примере MapИнструкции на основетекущий本地времяdate_local для сопоставления регулярных выражений,Сопоставьте результаты сопоставления с различными значениями ограничения скорости. Если текущее время соответствует периоду времени между 8:00 и 13:00.,В противном случае ограничение скорости устанавливается на уровне 1 МБ/с;,Ограничение скорости по умолчанию составляет 500 КБ/с. Затем,Используйте эти значения ограничения скорости как переменную.limit_rateперешел кlimit_rateинструкция,выполнить Динамическое ограничение скорости。

Таким образом,Nginx может автоматически регулировать ограничение скорости в зависимости от текущего периода времени.,выполнить Понятно Динамическое ограничение скоростииз Функция。

на основепеременная Динамическое ограничение скорости

Используйте команду Nginx «переменнаякарта» в сочетании с файлами cookie для достижения динамического ограничения скорости для разных пользователей. ты

первый,ужеопределение Понятно一个mapпеременная$limit_rate_cookie,В соответствии с разными значениями пользовательских файлов cookie они сопоставляются с разными значениями ограничения скорости. затем, Директива limit_rate используется для применения этой переменной к настройке ограничения скорости.

Язык кода:javascript
копировать
map $cookie_User $limit_rate_cookie {
    gold   64k;
    silver 32k;
    copper 16k;
    iron   8k;
}

server {
    ...
    location / {
        limit_rate $limit_rate_cookie;
        ...
    }
    ...
}

В этом примере,Различные значения ограничения скорости сопоставляются в соответствии со значением файла cookie пользователя. Например,Если файл cookie пользователя содержит «User=gold»,Ограничение скорости составляет 64 КБ/с, если указано «User=silver»;,Ограничение скорости составляет 32 КБ/с.,И так далее.

Таким образом,Nginx будет динамически регулировать ограничение скорости в зависимости от значения файла cookie пользователя.,Реализованы персонализированные ограничения скорости для разных пользователей.

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.