首页 > 其他 > 详细

Nginx高级模块学习

时间:2020-10-23 00:01:50      阅读:52      评论:0      收藏:0      [点我收藏+]

Nginx的rewrite规则

实现url重写一级重定向

使用场景:

1、URL访问跳转,支持开发设计

    页面跳转、兼容性支持、展示效果

2、SEO优化

3、维护

    后台维护、流量转发等

4、安全

配置语法:

Syntax: rewrite regex replacement
Default: -
Context: server,location,if

rewrite ^(.*)$ /pages/maintain.html break;

正则表达式

. 匹配除换行符意外的任意字符
? 重复0次或1次
+ 重复一次或更多次
* 最少链接数,那个机器连接数少就分发
\d 匹配数字
^ 匹配字符串的开始
$ 匹配字符串的介绍
{n} 重复n次
{n,} 重复n次或更多次
[c] 匹配单个字符c
[a-z] 匹配a-z小写字母的任意一个

 

 

 

 

 

 

 

()用于匹配括号之间的内容 通过$1、$2调用

if ($hrrp_user_agent ~ MSIE){

  rewite ^(.*)$ /msie/$1 break;  
}

flag

技术分享图片

 

 

 

技术分享图片

 

 

Rewrite规则优先级

  执行server块的rewritr指令

  执行location匹配

  执行选定的location中的rewrite 

Nginx 和 GeoIP 模块读取IP所在的地域信息

yum install nginx-module-geoip

http_geoip_module使用场景

一、区别国内外作HTTP访问规则
二、区别国内城市地域作HTTP访问规则
yum 安装好后找到安装的模块文件
如果nginx是用yun安装的一般是安装到 /etc/nginx/modules/目录下
注意:如果nginx不是yum安装的而是源码编译安装的需要从新安装编译一次nginx加上此模块,然后就不用手动加入此模块了。

手动加入模块

在nginx.conf配置文件的头部载入模块和http是同一个级别的

load_module "modules/ngx_http_geoip_module.so";
load_module "modules/ngx_stream_geoip_module.so";

因为GeoIP是基于MaxMind 提供了数据库文件来读取地域信息的所以需要下载ip的地域文件。
这个数据库是二进制的,不能用文本编辑器打开,需要上面的 GeoIP 库来读取。

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz  #国家的地域IP
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz          #城市的地域IP

然后解压

load_module "modules/ngx_http_geoip_module.so";
load_module "modules/ngx_stream_geoip_module.so";

.......

http{
geoip_country /etc/nginx/geoip/GeoIP.dat;  #加载国家IP
geoip_city /etc/nginx/geoip/GeoLiteCity.dat; #加载城市IP

.........

    server
    {
    ......
    location / {
      #判断如果不是中国的就返回403;
      if ($geoip_country_code != CN) {
            return 403;
        }
    }
    #返回国家城市信息
    location /myip {
        default_type text/plain;
        return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city";
    }

....
    }
}

然后访问 你的IP地址/myip 就可以返回IP所在的国家城市信息了。

 

实现url重写一级重定向

使用场景:

1、URL访问跳转,支持开发设计

    页面跳转、兼容性支持、展示效果

2、SEO优化

3、维护

    后台维护、流量转发等

4、安全

配置语法:

Syntax: rewrite regex replacement
Default: -
Context: server,location,if

rewrite ^(.*)$ /pages/maintain.html break;

正则表达式

. 匹配除换行符意外的任意字符
? 重复0次或1次
+ 重复一次或更多次
* 最少链接数,那个机器连接数少就分发
\d 匹配数字
^ 匹配字符串的开始
$ 匹配字符串的介绍
{n} 重复n次
{n,} 重复n次或更多次
[c] 匹配单个字符c
[a-z] 匹配a-z小写字母的任意一个

 

 

 

 

 

 

 

()用于匹配括号之间的内容 通过$1、$2调用

if ($hrrp_user_agent ~ MSIE){

  rewite ^(.*)$ /msie/$1 break;  
}

flag

技术分享图片

 

 

 

技术分享图片

 

 

Rewrite规则优先级

  执行server块的rewritr指令

  执行location匹配

  执行选定的location中的rewrite 

Nginx 和 GeoIP 模块读取IP所在的地域信息

yum install nginx-module-geoip

http_geoip_module使用场景

一、区别国内外作HTTP访问规则
二、区别国内城市地域作HTTP访问规则
yum 安装好后找到安装的模块文件
如果nginx是用yun安装的一般是安装到 /etc/nginx/modules/目录下
注意:如果nginx不是yum安装的而是源码编译安装的需要从新安装编译一次nginx加上此模块,然后就不用手动加入此模块了。

手动加入模块

在nginx.conf配置文件的头部载入模块和http是同一个级别的

load_module "modules/ngx_http_geoip_module.so";
load_module "modules/ngx_stream_geoip_module.so";

因为GeoIP是基于MaxMind 提供了数据库文件来读取地域信息的所以需要下载ip的地域文件。
这个数据库是二进制的,不能用文本编辑器打开,需要上面的 GeoIP 库来读取。

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz  #国家的地域IP
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz          #城市的地域IP

然后解压

load_module "modules/ngx_http_geoip_module.so";
load_module "modules/ngx_stream_geoip_module.so";

.......

http{
geoip_country /etc/nginx/geoip/GeoIP.dat;  #加载国家IP
geoip_city /etc/nginx/geoip/GeoLiteCity.dat; #加载城市IP

.........

    server
    {
    ......
    location / {
      #判断如果不是中国的就返回403;
      if ($geoip_country_code != CN) {
            return 403;
        }
    }
    #返回国家城市信息
    location /myip {
        default_type text/plain;
        return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city";
    }

....
    }
}

然后访问 你的IP地址/myip 就可以返回IP所在的国家城市信息了。

 

使用nginx secure_link指令实现下载防盗链

一、安装nginx并检查是否已安装模块

[root@img_server ~]# nginx -V #输出nginx所有已安装模块,检查是否有ngx_http_secure_link_module

二、配置nginx

[root@img_server ~]# vim /etc/nginx/conf.d/dowm_img_safe.conf 
server {
        listen       80;
        server_name  img_server;
        root         /usr/share/nginx/html/;

    location / {
        secure_link $arg_md5,$arg_expires;  #这里配置了2个参数一个是arg_md5,一个是arg_expires
        secure_link_md5 "$secure_link_expires$uri secret_key"; #secret_key为自定义的加密串   
    if ($secure_link = "") {
        return 403;       #资源不存在或哈希比对失败
        }
    if ($secure_link = "0") {
        return 403;      #时间戳过期 
        }
      if ($request_filename ~* ^.*?\.(jpg)$){
        add_header Content-Disposition attachment;  #不浏览,直接下载
}
        }

        }

三、使用shell脚本生成下载的链接(生产环境由开发在代码中实现)

[root@img_server html]# cat md5url.sh 
#!/bin/bash
servername="img_server"  #服务器的域名
download_file="/test.jpg" #测试下载文件的uri
time_num=$(date -d "+300 seconds" +%s) #定义过期时间为300秒
secret_num="secret_key" #自定义的加密串,和nginx的配置文件中加密串相同
res=$(echo -n "${time_num}${download_file} ${secret_num}"|openssl md5 -binary|openssl base64|tr +/ -_|tr -d =)  #生成MD5值
echo "http://${servername}${download_file}?md5=${res}&expires=${time_num}" #打印下载链接

四、测试

[root@img_server html]# chmod +x md5url.sh  #添加权限
[root@img_server html]# systemctl start nginx #启动服务
[root@img_server html]# wget http://pic17.huitu.com/res/20140314/526868_20140314230121822200_1.jpg
[root@img_server html]# mv 526868_20140314230121822200_1.jpg test.jpg #下载一个图片,并命名为test.jpg

1.测试直接访问(测试机器需要添加域名解析)

技术分享图片

 

 

 

访问结果为403

2.使用生成的下载链接进行访问

技术分享图片

 

 

 过五分钟(即脚本中300秒)再次访问,返回410

技术分享图片

注意事项

1 密钥防止泄露、以及经常更新密钥
2 下载服务器和链接生成的服务器上的时间不能相差太大,否则容易出现文件一直都是过期状态.

 

Nginx高级模块学习

原文:https://www.cnblogs.com/suixing123/p/13861610.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!