在LNMP(Linux, Nginx, MySQL, PHP)架构中,Nginx可以通过配置文件来限制访问频率,以防止恶意访问和保护服务器资源。以下是一些常用的方法来限制访问频率:
limit_req_zone
和 limit_req
limit_req_zone
指令用于定义一个共享内存区域来存储请求计数器,而 limit_req
指令用于限制请求速率。
http {
# 定义一个共享内存区域来存储请求计数器
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
server {
listen 80;
server_name example.com;
location / {
# 应用限制请求速率
limit_req zone=mylimit burst=5 nodelay;
...
}
}
}
$binary_remote_addr
:使用客户端的IP地址作为键。zone=mylimit:10m
:定义一个名为 mylimit
的共享内存区域,大小为10MB。rate=1r/s
:每秒允许的最大请求数为1。burst=5
:允许短时间内的突发请求达到5个。nodelay
:不延迟处理请求,立即处理突发请求。ngx_http_limit_conn_module
ngx_http_limit_conn_module
模块可以限制每个客户端的并发连接数。
http {
# 定义一个共享内存区域来存储连接计数器
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
listen 80;
server_name example.com;
location / {
# 应用限制并发连接数
limit_conn addr 5;
...
}
}
}
$binary_remote_addr
:使用客户端的IP地址作为键。zone=addr:10m
:定义一个名为 addr
的共享内存区域,大小为10MB。limit_conn addr 5
:每个客户端最多允许5个并发连接。ngx_http_limit_req_module
和 ngx_http_limit_conn_module
组合可以同时使用这两个模块来更精细地控制访问频率和并发连接数。
http {
# 定义共享内存区域
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
listen 80;
server_name example.com;
location / {
# 应用限制请求速率和并发连接数
limit_req zone=mylimit burst=5 nodelay;
limit_conn addr 5;
...
}
}
}
Nginx还有一些第三方模块,如 ngx_http_limit_conn_module
和 ngx_http_limit_req_module
的增强版本,可以提供更复杂的访问控制功能。
sudo nginx -s reload
。rate
、burst
和 limit_conn
的值。通过以上方法,可以有效地限制Nginx的访问频率,保护服务器免受恶意访问和资源耗尽的影响。