Как Nginx ограничивает количество запросов в секунду, количество подключений в секунду и скорость загрузки?
Как Nginx ограничивает количество запросов в секунду, количество подключений в секунду и скорость загрузки?

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

1. Nginx ограничивает количество запросов в секунду

Ограничение количества запросов в секунду означает ограничение количества запросов, которые каждый клиент может отправить в единицу времени, чтобы предотвратить такие проблемы, как вредоносные атаки и DoS-атаки. Этого можно достичь путем:

1.1. Использование модуля limit_req.

Модуль limit_req — это модуль ограничения скорости запросов Nginx, который можно использовать для управления скоростью запросов клиента. Этого можно достичь, выполнив следующие шаги:

  1. Установите модуль limit_req,Например, используяyumЗаказ:sudo yum install nginx-module-limit-req
  2. Добавьте следующие элементы конфигурации в файл конфигурации Nginx:
Язык кода:txt
копировать
http {
  limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
  server {
    location / {
      limit_req zone=one burst=5 nodelay;
    }
  }
}

Вышеуказанные элементы конфигурации указывают, что в 10 МБ памяти каждый IP-адрес ограничен 1 запросом в секунду. Если это число будет превышено в течение установленного времени, возникнет ошибка 503.

1.2. Использование скриптов Lua.

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

  1. Включить модуль Lua для Nginx,Например, используяyumЗаказ:sudo yum install nginx-module-lua
  2. Добавьте следующие элементы конфигурации в файл конфигурации Nginx:
Язык кода:txt
копировать
http {
    lua_shared_dict limit_req_store 10m;
    server {
        location / {
            access_by_lua_block {
                local limit = require "resty.limit.count"
                local lim, err = limit.new("limit_req_store", 5, 10)
                if not lim then
                    ngx.log(ngx.ERR, "failed to instantiate a resty.limit object: ", err)
                    return ngx.exit(500)
                end
                local key = ngx.var.binary_remote_addr
                local delay, err = lim:incoming(key, true)
                if not delay then
                    if err == "rejected" then
                        return ngx.exit(503)
                    end
                    ngx.log(ngx.ERR, "failed to limit req count: ", err)
                    return ngx.exit(500)
                end
                if delay >= 0.001 then
                    ngx.sleep(delay)
                end
            }
        }
    }
}

Приведенный выше элемент конфигурации указывает, что в 10 МБ памяти существует ограничение в 5 запросов в секунду для каждого IP-адреса. Если это число будет превышено в течение установленного времени, будет возвращена ошибка HTTP 503.

2. Nginx ограничивает количество подключений в секунду

Ограничение количества подключений в секунду означает ограничение количества подключений, которые каждый клиент может установить за единицу времени, чтобы предотвратить вредоносные атаки, DoS-атаки и другие проблемы. Этого можно достичь путем:

2.1. Использование модуля limit_conn.

Модуль limit_conn — это модуль ограничения скорости соединения Nginx, который можно использовать для управления скоростью соединения клиента. Этого можно достичь, выполнив следующие шаги:

  1. Установите модуль limit_conn,Например, используяyumЗаказ:sudo yum install nginx-module-limit-conn
  2. Добавьте следующие элементы конфигурации в файл конфигурации Nginx:
Язык кода:txt
копировать
http {
  limit_conn_zone $binary_remote_addr zone=addr:10m;
  server {
    location / {
      limit_conn addr 5;
    }
  }
}

Приведенные выше элементы конфигурации указывают на то, что в 10 МБ памяти на каждый IP-адрес ограничено 5 подключений. Если это число будет превышено в течение установленного времени, возникнет ошибка 503.

2.2 Используйте iptables для ограничения количества подключений.

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

  1. Установить iptables,Например, используяyumЗаказ:sudo yum install iptables
  2. Добавьте следующие правила:
Язык кода:txt
копировать
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 32 -j DROP

Вышеупомянутое правило означает, что на порту 80 количество подключений на один IP-адрес ограничено не более 10. Если это число будет превышено, в соединении будет отказано.

3. Ограничение скорости загрузки

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

3.1. Использование модуля ngx_http_limit_rate_module.

Модуль ngx_http_limit_rate_module — это модуль Nginx, который можно использовать для ограничения скорости соединения. Этого можно достичь, выполнив следующие шаги:

  1. Включить модуль ngx_http_limit_rate_module,Например, используяconfigureЗакази добавить--with-http_limit_rate_moduleпараметр:./configure --with-http_limit_rate_module
  2. Добавьте следующие элементы конфигурации в файл конфигурации Nginx:
Язык кода:txt
копировать
http {
    server {
        location /download/ {
            limit_rate 50k;
        }
    }
}

Вышеуказанные элементы конфигурации указывают на то, что при запросе файлов в каталоге /download/ скорость загрузки в секунду не будет превышать 50КБ/с.

3.2. Использование сторонних модулей.

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

  1. Использование модуля nginx-module-slowfs-cache
  2. Использование модуля nginx-module-limit-dl-speed

4. Резюме

В этой статье представлены такие технологии Nginx, как ограничение количества запросов в секунду, ограничение количества подключений в секунду и ограничение скорости загрузки. Эти технологии очень важны для обеспечения стабильности и безопасности системы. Мы можем использовать модуль limit_req, модуль limit_conn, скрипт Lua, iptables, модуль ngx_http_limit_rate_module и другие технологии для реализации ограничений и контроля Nginx, тем самым обеспечивая стабильность и безопасность системы.

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 позволяет экспортировать с сохранением двух десятичных знаков.