user www;
worker_processes 2;
pid /var/run/nginx.pid;
events {
use kqueue;
worker_connections 1024;
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
large_client_header_buffers 4 4k;
tcp_nopush on;
sendfile on;
output_buffers 32 512k;
sendfile_max_chunk 128k;
postpone_output 1460;
tcp_nodelay on;
limit_zone lconn $binary_remote_addr 10m;
fastcgi_intercept_errors on;
server_names_hash_bucket_size 64;
client_max_body_size 15m;
server {
listen 89.252.34.107;
server_name hilik.org.ua www.hilik.org.ua;
limit_conn lconn 1;
location / {
root /usr/local/www/hilik.org.ua;
index index.html index.htm;
}
}
}
В этом примере, мы ограничили число одновременных закачек(соединений) для всего виртуального хоста hilik.org.ua.
Настройка limit_req очень похожа на limit_zone. Точно так же, настраивается зона (limit_req_zone) для хранения состояния сессий, состояние сессий так же базируется на ip адресе с которого пришел запрос и так же вносятся ограничения в виртуал хост или в location с помощью limit_req.
В конфиге настройка выглядит так:
user www;
worker_processes 2;
pid /var/run/nginx.pid;
events {
use kqueue;
worker_connections 1024;
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
large_client_header_buffers 4 4k;
tcp_nopush on;
sendfile on;
output_buffers 32 512k;
sendfile_max_chunk 128k;
postpone_output 1460;
tcp_nodelay on;
#Зона для учета запросов
limit_req_zone $binary_remote_addr zone=lreq:10m rate=2r/s;
fastcgi_intercept_errors on;
server_names_hash_bucket_size 64;
client_max_body_size 15m;
server {
listen 89.252.34.107;
server_name hilik.org.ua www.hilik.org.ua;
#Вносим ограничение
limit_req zone=lreq burst=4;
location / {
root /usr/local/www/hilik.org.ua;
index index.html index.htm;
}
}
}
В limit_req присутствует пареметр burst – этот параметр определяет максимальное, кратковременное превышение лимита. При этом для дальнейшиг запросов с превысившего лимит ip адреса будет пересчитано число запросов и выровняно в определенный лимит. Ну в общем если в 1 секунду пришло с адреса 4 запроса то в следующую секунду не будет обработано ни одного запроса. Пока не вернется число запросов в секунду в нормальный лимит.
При превышении лимитов, как limit_zone так и limit_req_zone, nginx возвращает 503 ошибку.