一    ngx_http_rewrite_module模块

1)Nginx服务器利用'ngx_http_rewrite_module 模块'解析和处理rewrite请求,此功能依靠 'PCRE(perl compatible regularexpression)',因此编译之前要安装PCRE库2)rewrite是nginx服务器的重要功能之一,用于实现'URL的重写'3)URL的重写'应用场景':比如它可以在我们'改变网站结构'之后,'不需要客户端修改'原来的书签,也无需其他网站修改我们的链接,就可以设置为访问4)另外还可以在一定程度上提高'网站的安全性'

rewrite规则

++++++++++++++'补充'++++++++++++++1) '|'  -->用在(a|b)表示'或',任意匹配即可2) '\'  -->反斜杠转义;nginx中一般把'元字符'转变为普通字符;'域名'匹配

rewrite_log指令

设置'是否开启'记录ngx_http_rewrite_module模块日志记录到error_log日志文件当中,可以配置在'http、server、location或if'当中,需要'日志级别为notice'备注: 调试时比较有用,可以看到'请求的次数'

Nginx的Rewrite规则编写实例

rewrite应用场景

二   关键标识

if、set、break、last、permanent、redirect、return

①    if

参考博客

官网说: if 是为 rewrite 服务的,一般在'location'中定义应用场景: 结合'变量'和'正则表达式'来使用用于'条件匹配'判断,并根据'条件判断结果'选择不同的Nginx配置,可以配置在'server或location块'中进行配置备注:nginx的'if语法'仅能使用if做'单次判断','不支持'使用if else或者if elif这样的'多重判断','也不支持'多个条件逻辑'&&和||'处理,也不支持if的'嵌套'语法

正则匹配案例

set $domainWhitelist "yahoo\.com|google\.com|foo\.com";
if ($http_origin ~* "https?://([\w-]*\.)*($domainWhitelist)(:\d+)?") {
...
}

防盗链$http_referer

防盗链;其它参考;最佳参考

利用nginx限制HTTP的请求方法

1)'^': 匹配字符串的'开始位置';2) $ : 匹配字符串的'结束位置';3).* : .匹配'任意单个字符'-->字符,'*'匹配'字符数量'-->'0到正无穷';4)\. : 斜杠用来转义,'\.匹配 .' -->例如'匹配ip'就需要转义5)(值1|值2|值3|值4):或匹配模式,例:'(jpg|gif|png|bmp)'匹配jpg或gif或png或bmp

rewrite可使用的全局变量

②    set

语法:setvariable value ; 默认值:none; 使用环境:'server,location,if';功能: 指定key并给其'定义一个变量'扩展用法: 变量可以调用Nginx'内置变量赋值给key'表现形式: set定义格式为"set $key $value",及无论是key还是value都要'加$符号'

三    rewrite规则

1)rewrite指令'作用域': server,location,ifrewrite按配置文件中出现的'顺序执行','flags标志'可以停止继续处理+++++++++++++'flags参数'+++++++++++++1)last  停止处理后续rewrite指令集,然后对'当前重写的新URI'在rewrite指令集上'重新查找'2)break 停止处理后续rewrite指令集,'并不再重新查找',但是'当前location内'剩余'非rewrite语句'和'location外'的的'非rewrite语句'可以执行3)redirect 返回'302临时'重定向4)permant  返回'301永久'重定向

Nginx中rewrite指令注意事项

②    nginx rewrite指令执行顺序

1)执行'server块'的rewrite指令(这里的块指的是'server关键字后{}包围的区域')2)执行'location匹配'3)执行选定的'location中的rewrite'指令备注:如果其中'某步URI被重写',则'重新循环执行1-3',直到找到'真实存在的文件'注意:如果'循环超过10次',则'返回500 Internal Server Error'错误 -->可能'死循环'场景

http调转到https的三种方式

③    last

环境: 'last、reak指令'主要是应用在'rewrite、return指令'中+++++++++++'对比实验'+++++++++++last 停止rewrite检测 【如果'没有匹配到',会'继续向下'匹配】break 停止rewrite检测【如果'没有匹配到',则'不再向下'匹配,直接返回结果404】redirect  返回302临时重定向,'地址栏'会'显示跳转后的地址'permanent 返回301永久重定向,地址栏会'显示跳转后的地址'

对比前 

1)准备相应的资源文件

2)修改配置文件

3)测试

对比后

3)last 结论

1)url由'重写前'的http://nginx.wzj.com/aaa/index.html变为'重写后'的http://nginx.wzj.com/bbb/index.html2)相当于'此时客户端的请求'是'http://nginx.wzj.com/bbb/index.html',会重新进行location匹配后,'匹配到第二个location条件',所以请求url'得到的响应是hello wold'更准确的理解: 相当于'外部'发送了'两次请求'注意: 而'不是/bbb/index.html'的'bbb'信息输出,'跨location'

④    break

1)用于'中断'当前'相同作用域'(location)中的其他Nginx配置,与该指令处于同一作用域的Nginx配置中,位于它'前面的配置生效',位于'后面的指令配置'就'不再生效了'2)Nginx服务器在根据'配置处理请求的过程中'遇到该指令的时候,'回到上一层作用域'继续'向下读取'配置,该指令可以在'server块'和'location块'以及'if块'中使用

1)测试1 

location /login {default_type text/html;index index.html;#自定义一个变量"$name",其值为"wzj_110"set $name "wzj_110";说明:使用break后,其'下面的其它指令'将'不会继续执行'break;#自定义一个变量"$my_port",其值是通过调用Nginx内置变量"$server_port"得到的set $my_port $server_port;echo $name;echo $my_port;
}

2)死循环

3)接last的实验,将flags中last标识改成break

1)url由'重写前'的http://nginx.wzj.com/aaa/index.html变为'重写后'http://nginx.wzj.com/bbb/index.html2)nginx按照'重写后的url'进行资源匹配,匹配到的'资源文件'是/usr/share/nginx/html/bbb/index.html备注: 此时由于'break'不会进行新的location匹配,而把'重写后的url'请求作为服务器对应的'资源文件'进行查找,找不到则返回'404'错误3)所以'原始请求url得到的响应'就是/usr/share/nginx/html/bbb/index.html'文件中的内容'--->'bbb'

⑤    nginx rewrite last和break区别

last  停止rewrite-->如果'没有匹配到',会继续'向下匹配',如果'匹配到',会'重新发起'匹配break 停止rewrite-->如果'没有匹配到',则'不会向下匹配',返回404

实验的博客

配置rewrite 'last'时,请求'跳出当前location',进入server块,重新进行location匹配,'超过10次匹配不到'报500错误,客户端的url不变配置rewrite 'break'时,请求'不会跳出'当前location,但'资源匹配会按照重写后的url进行',如果location里面'配置的是proxy_pass'到后端,'后端服务器'收到的请求url也会是'重写后的url',客户端的url不变核心:当用'break修饰'的时候,表示'立即返回当前资源'

四   return

++++++++++++++'return指令'++++++++++++++语法:return code;return code URL;'作用域':server,location,if停止处理-->'并返回'指定状态码(code)给客户端常使用: 403、404、500、503、504特殊:非标准状态码'444'表示'关闭连接且不给客户端发响应头'return 支持'响应URL重定向'(对于301,302,303,307),或者'文本响应'(对于其他状态码).对于文本或者URL重定向可以'包含变量'+++++++++++++'应用场景'+++++++++++++从nginx版本'0.8.2'开始支持,return用于完成对请求的处理,并'直接向客户端返回'响应状态码场景: 其可以指定'重定向URL'(对于特殊重定向状态码,301/302等) 或者是'指定提示文本内容'(对于特殊状态码403/500等),处于此指令后的所有配置'都将不被执行'

五     nginx代理https强制http跳转https

①  方式一

说明: '官方推荐'-->80和443分别在'不同的server'中server {listen 80;...return 301 https://$server_name$request_uri;# rewrite ^(.*)$ https://$host$1 permanent;  -->'二者等价'
}server {listen 443;...
}

②  方式二

if ($scheme = 'http') {return 301 https://$server_name$request_uri;
}'等价方式'if ( $scheme = 'http' ){rewrite ^(.*)$  https://$host$1 permanent;
}+++++++++++++++在'一个server段'里'同时监听80和443'端口+++++++++++++++server {listen 80;listen 443;server_name www.wzj.com;ssl   on;ssl_certificate        /data/www-key/xxx.pem;ssl_certificate_key    /data/www-key/xxx.key;if ($scheme = http) {return 301 https://$server_name$request_uri;}}可能出现的问题: 无论'是http还是https'都会'无限地重定向'下去,在这种情况下Chrome会报"重定向循环"的错误

六   nginx中 $1,$2,$3是什么

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

参考博客

七  try_files

nginx配置选项try_files详解

Nginx(十三)rewrite功能相关推荐

  1. Nginx的rewrite应用

    Rewrite主要的功能是实现URL重写,Nginx 的 Rewrite 规则采用 PCRE Perl 兼容正则表达式的语法进行规则匹配,如相使用 Nginx 的 Rewrite 功能,在编译 Ngi ...

  2. nginx之ReWrite语法

    转载自:https://www.cnblogs.com/crazylqy/p/6892010.html 1 ReWrite语法 Nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现ur ...

  3. nginx rewrite功能使用

    前言 大家在浏览某些网站的时候,有没有发现,当输入:www.abc.com或者www.abcd.com的时候,页面均能正常显示www.abc.com的主页内容.这就是nginx rewrite的一个使 ...

  4. nginx Rewrite功能配置

    这里写目录标题 1功能简介 2 Rewrite的相关指令 2.1 set 指令 2.2 Rewrite常用全局变量 2.3 if 指令 2.4 break 指令 2.5 return 指令 2.6 r ...

  5. Nginx的重写功能——Rewrite

    目录 Nginx常见模块 nginx内置模块 nginx配置文件的常见模块 location模块 常见的正则表达式 location常用的匹配规则 Rewrite模块 Rewrite功能 Rewrit ...

  6. Nginx之rewrite配置

    Rewtrite : 其主要目的是为了进行URL 重写,进行URL重定向.主要采用PCRE: Perl Compatible Regular Expressions(Perl兼容正则表达式语法)进行规 ...

  7. Nginx的rewrite案例之目录合并

    目录自动添加"/" 问题描述 通过一个例子来演示下问题: server {listen 80;server_name localhost;location / {root html ...

  8. Nginx的rewrite内容介绍

    Rewrite功能配置 Rewrite是Nginx服务器提供的一个重要基本功能,是Web服务器产品中几乎必备的功能.主要的作用是用来实现URL的重写. 注意:Nginx服务器的Rewrite功能的实现 ...

  9. php选择nginx还是apache,浅谈apache和nginx的rewrite的区别

    1. Nginx Rewrite规则相关指令 Nginx Rewrite规则相关指令有if.rewrite.set.return.break等,其中rewrite是最关键的指令.一个简单的Nginx ...

最新文章

  1. Linux Logwatch 使用说明
  2. scala Akka并发编程介绍
  3. PHP中empty,is_null,isset的区别
  4. mysql怎么对比表结构_mysql查看表结构2种方式对比
  5. Delphi通过管道执行外部命令行程序(cmd)并获取返回结果
  6. Linux之export命令
  7. Bailian2977 生理周期【枚举+中国剩余定理】
  8. 【html、CSS、javascript-9】jquery-选择器及过滤器
  9. 小编带着小白看springboot源码3
  10. EBS:AP_INV_SELECTION_CRITERIA_ALL
  11. 从D语言看C++ Template语法
  12. SAP R3 系统技术基础
  13. 树莓派 电脑 文件共享 搬移
  14. 《软技能-代码之外的生存指南》的读后感
  15. 数加生产制造执行系统(MES)——优势
  16. html使用阿里图标库(iconfont)制作字体图标
  17. 网易数帆云原生故障诊断系统实践与思考
  18. “喜之郎”签约企企通,加速企业的采购数字化转型
  19. 斯伦贝谢和IBM宣布推出面向能源行业的混合云企业数据管理解决方案
  20. table2Excel边框,自定义列宽,行高,文件名

热门文章

  1. 芯片封装-fcCSP
  2. Qt pushbutton按钮常用方法及技巧总结
  3. 2018年的经历有苦有甜
  4. STM32+ESP8266连接服务器失败,不断发送OneNet_DevLink
  5. Linux常用端口整理
  6. 轻松hold住双11数据洪峰背后的秘密
  7. 我所喜欢的游戏,大家都来说说自己喜欢的:D
  8. python爬网页文字_怎么用python爬取网页文字?
  9. Passive Event Listeners
  10. 转:人际关系的本质是什么