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;
...
}
}