nginx 限制对代理HTTP资源的访问
详情参照官网:https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-http
文章目录
限制连接数
使用 limit_conn_zone 伪指令定义密钥并设置共享内存区域的参数(工作进程将使用该区域共享密钥值的计数器)。
http{
……
limit_conn_zone $binary_remote_addr zone=addr:10m;
……
}
使用 limit_conn 限制并发数。
location /download/ {
limit_conn addr 1;
}
示例截图
限制请求率
速率限制可用于防止DDoS攻击,或防止上游服务器同时被太多请求淹没。该方法基于以下算法:请求以各种速率到达存储桶,并以固定速率离开存储桶。
- 键-用于区分一个客户端与另一个客户端的参数,通常是一个变量
- 共享内存区域-保留这些键的状态的区域的名称和大小(“泄漏存储桶”)
- rate-每秒请求数(r/s)或每分钟请求数()中指定的请求速率限制r/m(“漏斗排放”)。每分钟请求数用于指定小于每秒一个请求的速率。
通过 limit_req_zone 伪指令设置
通过 limit_req 参数调用
http {
# ...
# zone = one -> 键,10m -> 共享内存区域的大小,rate = 1r / s -> 每秒处理一个请求
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
#...
#
location /download/{
limit_req zone=one;
}
}
}
示例截图
处理过多的请求
伪指令 limit_req 的 burst 参数设置等待以指定速率处理的过多请求的最大数量,超出突发限制的请求将被拒绝并显示503错误。:
消息队列的处理方式,先进先出。
http {
#...
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
#...
location /search/ {
limit_req zone=one burst=5;
}
}
}
如果在流量突发期间不需要延迟请求,请添加 nodelay 参数:
这个参数会在排队上限有空余时(前提是按照限定的速率处理完后,例如上例,一秒处理一个请求,在一秒内,就算请求处理完,队列也不会释放,会等待到达规定时间,再释放队列,这时队列才有空闲,空闲的数量是,定义的处理请求的数量,当然前提是已经处理完毕的请求数量),将超出限制的请求,加入排队队列中等待处理。
http {
#...
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
#...
location /search/ {
limit_req zone=one burst=5 nodelay;
}
}
}
示例截图
限制带宽
要限制每个连接的带宽,请使用 limit_rate 指令:
location /download/ {
limit_rate 50k;
}
使用此设置,客户端将能够通过单个连接以最大50千字节/秒的最大速度下载内容。
示例截图
自动索引
下载方便 autoindex on;
location / {
autoindex on;
}
示例截图
expire缓存配置
Nginx expires 缓存配置,缓存可以降低网站带宽,加速用户访问,设置缓存存放时间。
该 root 伪指令指定将用于搜索文件的根目录。为了获得请求文件的路径,NGINX将请求URI附加到root伪指令指定的路径。
location ~ .*\.(gif|jpg|png)$ {
expires 365d;
root /www;
}
示例截图
日志轮询
- 执行脚本
# cat nginxlog.sh
#!/bin/bash
cd /usr/local/nginx/logs && mv access.log access_$(date +%F -d -1day).log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
- 加入定时任务
00 00 * * * /opt/scripts/nginxlog.sh &> /dev/null
- 为了安全,日志目录不需要给你nginx用户访问权限
chmod -R 700 /usr/local/nginx/logs
示例截图
日志筛选记录
禁用不必要的日志记录,以节省磁盘IO的消耗 access_log
location ~ .*\.(js|jpg|jpeg|png|css|bmp|gif)$ {
access_log off;
}
示例截图
中文乱码
charset utf-8;
示例截图
ip 访问限制
- 通过参数 allow 允许,和 deny 拒绝,来限制。
location / {
allow 172.25.9.250;
deny all; }
- 也可以用 if 判断语句
if ($remote_addr = 172.25.0.254) {
return 403;
}
示例截图
防止域名恶意解析到服务器IP
通过 return 返回相应状态码实现。
server {
listen 80;
server_name _;
return 500; }
示例截图
重定向
- 通过 rewrite 参数定义重定向的路径,permanent 表示永久重定向。
server {
listen 80;
server_name _;
rewrite ^(.*) http://www.westos.org permanent;
}
- 80重定向443
server {
listen 80;
server_name www.westos.org;
rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
}
示例截图
- www.westos.org/bbs 重定向bbs.westos.org
# 只会重定向到 bbs.westos.org
rewrite ^/bbs$ http://bbs.westos.org permanent;
# 会重定向到 bbs.westos.org 下路径(子路径来源,原路径 bbs.westos.org 后面路径)
rewrite ^/bbs/(.*)$ http://bbs.westos.org/$1 permanent;
示例截图
- bbs.westos.org 重定向 www.westos.org/bbs
if ($host = "bbs.westos.org"){
rewrite ^/(.*)$ http://www.westos.org/bbs/$1 permanent;
}
示例截图
防盗链
location ~ \.(jpg|png)$ {
valid_referers none blocked www.westos.org;
if ($invalid_referer) {
return 403;
#rewrite ^/ http://www2.westos.org/daolian.jpg; }
示例截图