美文网首页
nginx secure_link_module模块(九)

nginx secure_link_module模块(九)

作者: andpy | 来源:发表于2018-05-25 09:12 被阅读34次

    secure_link_module模块

    安全链接模块
    作用:指定并允许检查请求的链接的真实性以及保护资源免遭未经授权的访问;限制链接生效周期。

    //语法
    Syntax:secure_link expression;
    Default:-
    Context:http,server,location;
    
    Syntax:secure_link_md5 expression;
    Default:-
    Context:http,server,location
    

    场景:如下载资源 /download?md5=sdfsdfsd&expires=212221152

    • 客户端发起请求
    • 服务端生成md5加密地下载地址(md5验证,过期校验)
    • 客户端根据地址请求下载
    • 服务端校验地址合法性
    • 客户端开始下载
    //示例
    server {
        listen 80;
        server_name localhost;
        
        root /opt/app/code;
        location / {
            #取参数名md5,expires的值
            secure_link $arg_md5,$arg_expires;
            #判断参数是否合法,用expires,uri,imooc进行加密,与上面的md5参数进行匹配,返回相应的状态
            secure_link_md5 "$secure_link_expires$uri imooc";
                
            #没有匹配到返回 ""
            if ($secure_link = ""){
                return 402;
            }
            #没有匹配到返回0
            if ($secure_link = "0"){
                return 410;
            }
        }
    }
    
    //用shell生成模拟地址,真实环境通过后台代码生成
    servername="www.applelife.xyz"
    download_file="/download/file.img"
    time_num=$(date -d "2018-10-18 00:00:00" +%s)
    secret_num="imooc"
    res=$(echo -n "${time_num}${download_file} ${secret_num}"|openssl md5 -binary|openssl base64 | tr+/-_|tr -d =)
    echo "http://${servername}${download_file}?md5=${res}&expires=${time_num}"
    

    geoip_module模块

    基于ip地址匹配MaxMind GeoIP二进制文件,读取Ip所在地域信息。
    场景:如果有两台服务器国内,和国外一台,国内用户访问国内服务器,国外用户访问国外服务器,访问不同的资源。

    默认是没有编译安装的需要自己安装

    //安装
    yum install nginx-module-geoip
    //查看模块
    cd /etc/nginx/modules/
    
    //编辑nginx.conf文件,加载该模块,加入配置
    load_module "modules/ngx_http_geoip_module.so";
    load_module "modules/ngx_stream_geoip_module.so";
    
    //下载基于MaxMind数据库的文件
    //国家
    wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
    //城市
    wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
    
    //解压文件 出来之后是 .dat的文件
    gunzip GeoLite2-Country.tar.gz GeoLite2-City.tar.gz
    
    #配置示例 ,自己注意路径
    geoip_country /etc/nginx/geoip/GeoIp.dat;
    geoip_city /etc/nginx/geoip/GeoLiteCity.dat;
    ...
    location / {
        #只允许国内用户访问 
        if ($geoip_country_code !=CN){
            return 403;
        }
        root /usr/share/nginx/html;
        index index.html index.htm;
    }
    
    #查看自己的出口地址
    location /myip {
        default_type text/plain;
        return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city";  
    }
    

    http_geoip_module使用场景

    • 区别国内外 作http访问规则
    • 区别国内城市地域作http访问规则

    相关文章

      网友评论

          本文标题:nginx secure_link_module模块(九)

          本文链接:https://www.haomeiwen.com/subject/uqkyjftx.html