nginx中常用请求限制

文章类型:nginx

发布者:admin

发布时间:2023-04-17

一:请求速率限制:可以使用 limit_req 模块来限制每个客户端的请求速率。限制一定时间内的请求数量,防止恶意客户端通过发送大量请求来使服务器不可用。

http {
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

server {
location / {
limit_req zone=mylimit burst=20 nodelay;

}
}
}

二:连接数限制:可以通过设置 worker_connections 参数,限制客户端和服务器之间的并发连接数

events {
worker_connections 1024;
}

三:缓冲区大小限制:可以通过设置 client_body_buffer_size 和 client_header_buffer_size 参数,限制客户端请求的大小。防止缓冲区溢出攻击

http {
client_body_buffer_size 10K;
client_header_buffer_size 1k;
}

四:请求长度限制:可以使用 client_max_body_size 参数来限制客户端请求的长度。防止服务器资源过度使用和缓冲区溢出攻击

http {
client_max_body_size 10M;
}

五:IP 地址限制:可以使用 geo 模块或第三方模块来限制特定 IP 地址或 IP 地址范围的访问。可以防止未经授权的访问或恶意攻击

http {
geo $whitelist {
default no;
10.0.0.0/8 yes;
192.168.0.0/16 yes;
}

server {
location / {
if ($whitelist = no) {
return 403;
}

}
}
}

六:HTTP 方法限制:可以使用 limit_except 模块来限制客户端请求的 HTTP 方法。可以防止未经授权的请求或恶意攻击

http {
server {
location / {
limit_except GET POST {
deny all;
}

}
}
}

七:请求频率限制:可以使用 limit_req_zone 和 limit_req 模块来限制客户端请求的频率。防止 DDoS 攻击和过度资源使用

http {
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;

server {
location / {
limit_req zone=req_limit burst=10;

}
}
}

八:请求 gzip 压缩:可以使用 gzip 模块来压缩客户端请求的响应,以减少传输数据量

http {
gzip on;
gzip_types text/plain text/css application/json application/javascript;

}

九:请求限制连接数:可以使用limit_conn 模块来限制客户端请求的连接数,以减轻后端服务器的负载和保护服务器安全

http {
limit_conn_zone $binary_remote_addr zone=my_zone:10m;
server {
listen 80;
server_name cqhxb.com;
location / {
limit_conn my_zone 10;

}
}
}

十:请求重定向:可以使用 rewrite 模块来重定向客户端请求,以便于处理 URL 路由和转发

http {
server {
listen 80;
server_name cqhxb.com;
location /old-url {
rewrite ^/old-url(.*)$ /new-url$1 permanent;
}

}
}

十一:请求重试:可以使用 proxy_next_upstream 模块来自动重试上游服务器的请求,以提高请求成功率

http {
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

}

十二:SSL/TLS 加密限制:可以使用 ssl_protocols 和 ssl_ciphers 参数来限制 SSL/TLS 加密协议和密码套件的使用。防止不安全的加密算法和弱密码套件的使用

http {
server {
listen 443 ssl;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
...
}
}