Nginx — это широко используемый высокопроизводительный веб-сервер и обратный прокси-сервер. Его превосходная производительность и масштабируемость позволяют широко использовать его в различных сетевых приложениях и сценариях. В реальном использовании, чтобы обеспечить стабильность и безопасность системы, Nginx необходимо в определенной степени настроить и оптимизировать. Среди них такие технологии, как ограничение количества запросов в секунду, ограничение количества подключений в секунду и ограничение скорости загрузки, являются одними из очень важных элементов конфигурации.
Ограничение количества запросов в секунду означает ограничение количества запросов, которые каждый клиент может отправить в единицу времени, чтобы предотвратить такие проблемы, как вредоносные атаки и DoS-атаки. Этого можно достичь путем:
Модуль limit_req — это модуль ограничения скорости запросов Nginx, который можно использовать для управления скоростью запросов клиента. Этого можно достичь, выполнив следующие шаги:
sudo yum install nginx-module-limit-req
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.
Другой способ добиться этого — использовать скрипты Lua. Этого можно достичь, выполнив следующие шаги:
sudo yum install nginx-module-lua
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.
Ограничение количества подключений в секунду означает ограничение количества подключений, которые каждый клиент может установить за единицу времени, чтобы предотвратить вредоносные атаки, DoS-атаки и другие проблемы. Этого можно достичь путем:
Модуль limit_conn — это модуль ограничения скорости соединения Nginx, который можно использовать для управления скоростью соединения клиента. Этого можно достичь, выполнив следующие шаги:
sudo yum install nginx-module-limit-conn
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
limit_conn addr 5;
}
}
}
Приведенные выше элементы конфигурации указывают на то, что в 10 МБ памяти на каждый IP-адрес ограничено 5 подключений. Если это число будет превышено в течение установленного времени, возникнет ошибка 503.
Другой способ добиться этого — использовать iptables для ограничения количества подключений. Этого можно достичь, выполнив следующие шаги:
sudo yum install iptables
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 32 -j DROP
Вышеупомянутое правило означает, что на порту 80 количество подключений на один IP-адрес ограничено не более 10. Если это число будет превышено, в соединении будет отказано.
Ограничение скорости загрузки означает ограничение скорости загрузки, когда сервер Nginx обеспечивает загрузку файлов клиенту, чтобы предотвратить перегрузку сервера или полную загрузку полосы пропускания и другие проблемы. Этого можно достичь путем:
Модуль ngx_http_limit_rate_module — это модуль Nginx, который можно использовать для ограничения скорости соединения. Этого можно достичь, выполнив следующие шаги:
./configure --with-http_limit_rate_module
http {
server {
location /download/ {
limit_rate 50k;
}
}
}
Вышеуказанные элементы конфигурации указывают на то, что при запросе файлов в каталоге /download/ скорость загрузки в секунду не будет превышать 50КБ/с.
Помимо использования официальных модулей, вы также можете использовать сторонние модули для ограничения скорости загрузки. Например:
В этой статье представлены такие технологии Nginx, как ограничение количества запросов в секунду, ограничение количества подключений в секунду и ограничение скорости загрузки. Эти технологии очень важны для обеспечения стабильности и безопасности системы. Мы можем использовать модуль limit_req, модуль limit_conn, скрипт Lua, iptables, модуль ngx_http_limit_rate_module и другие технологии для реализации ограничений и контроля Nginx, тем самым обеспечивая стабильность и безопасность системы.