1.防盗链处理
通过REFERER判断
代码如下 | 复制代码 |
location ~ .*.(gif|jpg|jpeg|png|bmp|wma|mp3|swf)$ { valid_referers none blocked server_names demo.hyzy120.com *.baidu.com; if ($invalid_referer) {return 403;} expires 30d; } |
#demo.hyzy120.com 允许的网址 ,多个网址用空格隔开例子:
一,针对后缀实行防盗链
代码如下 | 复制代码 |
location ~* .(gif|jpg|jpeg|png|bmp|txt|zip|jar|swf)$ { valid_referers none blocked *.mynginx.com; if ($invalid_referer) { rewrite ^/ yun_qi_img/logo.gif; #return 403; } } |
二,针对图片目录实行防盗链
代码如下 | 复制代码 |
location /images/ { alias /data/images/; valid_referers none blocked *.mynginx.com; if ($invalid_referer) { rewrite ^/ yun_qi_img/logo.gif; #return 403; } } |
Nginx实现valid_referer全面解析
2.限速处理
限速使用 limit_zone, limit_conn 以及 limit_rate 进行配置
首先在 http 段配置一个 limit_zone,然后在需要的地方使用 limit_conn 和 limit_rate 进行限速设置,如下一个简单的例子
代码如下 | 复制代码 |
http { limit_zone one $binary_remote_addr 10m; server { location /{ limit_conn one 5; limit_rate 20k; } } } |
说明:
limit_zone,是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个名叫one的10m大小的容器,这个名字会在后面的limit_conn中使用。
limit_conn one 1;
限制在one中记录状态的每个IP只能发起一个并发连接。
limit_rate 20k;
对每个连接限速20k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许三个并发连接,那么这个IP就是限速为limit_rate×3,在设置的时候要根据自己的需要做设置调整,要不然会达不到自己希望的目的。
修改完检测了一下配置文件
代码如下 | 复制代码 |
#/usr/local/nginx/sbin/nginx -t nginx: [warn] the "limit_zone" directive is deprecated, use the "limit_conn_zone" directive instead in /usr/local/nginx/conf/nginx.conf:7 |
出来了一个警告,limit_zone 已经弃用!该属性改成了limit_conn_zone。
那就改成:
代码如下 | 复制代码 |
limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; server { |
NginxHttpAccessKeyModule 插件
这个需要安装额外的模块,下载模块源码,然后按照说明文档,将下载来的源码中”$HTTP_ACCESSKEY_MODULE” 替换成 “ngx_http_accesskey_module“,再
代码如下 | 复制代码 |
./configure –add-module=path/to/nginx-accesskey |
完了以后再重新编译一次nginx,然后就可以在配置文件中使了。
代码如下 | 复制代码 |
location /download { accesskey on; accesskey_hashmethod md5; accesskey_arg "key"; accesskey_signature "mypass$remote_addr"; } |
这样一个下载的文件就需要 /file.zip?key=09093abeac094 这样的形式进行下载
其中 key的值为 mypass和下载客户端ip 进行md5运算获得。比如在 php 中可以向如下方式输出针对客户ip的下载链接地址