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所在的国家城市信息了。

使用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高级模块学习的更多相关文章

  1. Nginx相关模块学习使用实践指南

    转载自:https://www.bilibili.com/read/cv16150654?spm_id_from=333.999.0.0 0x01 Nginx 常用模块使用实践 官方模块使用手册:ht ...

  2. Nginx 高级配置-第三方模块编译

    Nginx 高级配置-第三方模块编译 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 第三模块是对nginx 的功能扩展,第三方模块需要在编译安装Nginx 的时候使用参数--add ...

  3. Nginx学习笔记六Nginx的模块开发

    1.Nginx配置文件主要组成:main(全局配置)这部分的指令将影响其他所有部分.server(虚拟主机配置)这部分指令主要用于指定虚拟主机域名,IP和端口.upstream(主要为反向代理,负载均 ...

  4. nginx源码学习资源(不断更新)

    nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源. 首先要做的当然是下载一份nginx源码,可以从nginx官方网站下载一份最新的. 看了nginx源码,发现这是一份完全没 ...

  5. nginx源码学习资源

    http://www.cnblogs.com/yjf512/archive/2012/06/13/2548515.html nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源 ...

  6. Nginx限速模块初探

    Nginx限速模块分为哪几种?按请求速率限速的burst和nodelay参数是什么意思?漏桶算法和令牌桶算法究竟有什么不同?本文将带你一探究竟.我们会通过一些简单的示例展示Nginx限速模块是如何工作 ...

  7. [转帖]Nginx rewrite模块深入浅出详解

    Nginx rewrite模块深入浅出详解 https://www.cnblogs.com/beyang/p/7832460.html rewrite模块(ngx_http_rewrite_modul ...

  8. Python 日期时间处理模块学习笔记

    来自:标点符的<Python 日期时间处理模块学习笔记> Python的时间处理模块在日常的使用中用的不是非常的多,但是使用的时候基本上都是要查资料,还是有些麻烦的,梳理下,便于以后方便的 ...

  9. python基础整理4——面向对象装饰器惰性器及高级模块

    面向对象编程 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象编程(Object Oriented Pro ...

随机推荐

  1. PHP数组函数总结与使用

    array_change_key_case(数组,CASE_LOWER/CASE_UPPER) 数组键值转化为小写CASE_LOWER/大写CASE_UPPER   array_chunk(数组,分割 ...

  2. 不同机房vpc使用openswan打通内网

    1.测试环境: 北京6云主机:120.92.51.75/10.0.3.13     VPC:10.0.0.0/16 Ren-test 上海2云主机:42.157.163.120/192.168.3.3 ...

  3. 在myeclipse里加大tomcat内存,jdk内存方法

    这是在myeclipse里加大的方法: -Xms4096m -Xmx4096m -XX:MaxNewSize=4096m -XX:MaxPermSize=4096m 如图所示: -XX:PermSiz ...

  4. 【LeetCode】213. House Robber II 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/house-rob ...

  5. 【LeetCode】643. 子数组最大平均数 I Maximum Average Subarray I (Python)

    作者: 负雪明烛 id: fuxuemingzhu 公众号:每日算法题 目录 题目描述 题目大意 解题方法 方法一:preSum 方法二:滑动窗口 刷题心得 日期 题目地址:https://leetc ...

  6. LeetCode1237找出给定方程的正整数解

    题目 给定方程f和值z,找出给定方程f(x,y)=z的正整数解x,y.f(x,y)关于x.y都是严格单调的. 题目保证 f(x, y) == z 的解处于 1 <= x, y <= 100 ...

  7. 1319 - Monkey Tradition

    1319 - Monkey Tradition   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB ...

  8. matplotlib 高阶之Transformations Tutorial

    目录 Data coordinates Axes coordinates Blended transformations 混合坐标系统 plotting in physical units 使用off ...

  9. [CNKI]个人论文收录

    [1]在校期间参加大创项目研究 以论文形式结题 发表时间:2018-03-25 基于VR虚拟现实技术的CBD微圈电商平台的研究 林旭; 陈丽娟 内江科技 2018-03-25 期刊 链接: 基于VR虚 ...

  10. 通过Rancher Desktop在桌面上运行K8s

    Rancher 发行的操作系统新选择:Rancher Desktop for Windows,它可以帮助你在Windows桌面上管理Kubernetes和容器.当然他当然会支持Linux,Mac的. ...