一些Nginx的高级扩展应用总结(3)

还有一种是用nginx的来判断

if ($http_user_agent ~* (mobile|nokia|iphone|ipad|Android|samsung|htc|blackberry)) {
// 添加你需要处理的语句,比如rewrite等
}

可能一些设备可能没有识别的,大家可以看分析日志,然后把 User-Agent的关键字写到if里面~

nginx的配置文件if语句是不支持“并且”和“或者”这样的多重条件判断的。在一些情况下,我们又需要if语句进行多个条件的判断,那么如何来实现呢?我们可以利用nginx的set语句设置变量的方法来解决。

假设我们需要对 /123/ 路径进行rewrite,但同时要排除 /123/images/ 路径不对该路径进行rewrite,可以采用下面的解决办法:

set $doRewrite "0";
 
if ($request_uri ~ ^/123/) {
set $doRewrite "1";
}
 
if ($request_uri ~ ^/123/images/) {
set $doRewrite "0";
}
 
if ($doRewrite = "1") {
// do rewrite
}

还有一个实例
 
这个意思是  判断真是的ip,然后根据ip做一些操作~  这里用的map映射

map $http_x_forwarded_for $deny_access {
    default    0;
    1.2.3.4    1;
    1.2.3.5    1;
    1.2.3.6    1;
}
 
if ($deny_access = 1) {
    return 403;
}

防盗链的一些个配置

location ~* \.(gif|png|jpg|bmp|swf|flv)$ {
    valid_referers none blocked ruifengyun.com;
 
    if ($invalid_referer) {
            return 403;
    }
}

以上的例子可以实现扩展名为 gif,png,jpg,bmp,swf,flv的url防止被盗链。如果你需要其它的url防止被盗链,添加相应的后缀即可。

也可以 把return 403 替换成 #rewrite ^/ ;    这样可以用另一种方法推广自己的网站

nginx的限速的规则

配置简单,只需3行

http{
 
    ……
 
    limit_zone one $binary_remote_addr 10m;
 
    ……
 
    server {
 
        location / {
 
            ……
 
            limit_conn one 2;
 
            limit_rate 40k;
 
        }
 
    }
 
}

意思是:limit_zone针对每个IP定义一个存储session状态的容器。这个示例中定义了一个名叫one的10m大小的容器,这个名字会在后面的limit_conn中使用。limit_conn指定每个访客只能建立两条链接,limit_rate限制每条链接的速度不超过40K。所以,以上配置限制用户访问此站点总速度上限为80K。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d08111330442f67e5100d9316607d3d6.html