nginx secure_link_module模块(九)

2018-05-25  本文已影响34人  andpy

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

//示例
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使用场景

上一篇下一篇

猜你喜欢

热点阅读