Nginx高级之Rewrite规则

版权声明:原创文章, 欢迎转载. https://blog.csdn.net/ip_JL/article/details/84422124

进阶阶段的回顾:

Nginx进阶之静态Web资源服务

Nginx进阶之代理服务

Nginx进阶之负载均衡服务

Nginx进阶之缓存服务和动静分离   

作用及应用场景

作用: 实现对URL的重写以及对匹配(正则表达式)的url的重定向

场景: 

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

① 页面跳转  ② 兼容性支持  ③ 展示效果

2. SEO优化

扫描二维码关注公众号,回复: 4516376 查看本文章

3. 维护

① 后台维护  ② 流量转发

4. 安全

① 伪静态页面

配置语法

systax: rewrite [正则表达式 替换前的URL] [替换后的URL] [标识];

default: 无配置

context: server域/location域/if判断里

配置实例: rewrite ^(.*)$ /pages/maintain.html break;  # 把所有的请求都跳转至maintain.html页面, break是一个标识符.

正则表达式

常用的正则表达式规则: 

. 匹配除换行符以外的任意字符
? 重复0次或1次
+ 重复1次或多次
* 最少链接数, 哪台服务器的连接数少就往那台服务器分发
\d 匹配数字
^ 匹配字符串的开始
$ 匹配字符串的结尾
{n}

重复n次

{n,} 重复n或更多次
[c] 匹配单个字符c
[a-z] 匹配a-z小写字母中的任意一个
\ 转义字符, 如: 转义一个后缀的点(index\.html$)
() 匹配括号之间的内容, 通过$1、$2调用

$1、$2的举例:

if($http_user_agent ~ MSIE){
    rewrite ^(.*)$ /msie/$1 break;  //(.*) 匹配所有文件名, 将其路径改为/msie/[该文件名]
}

FLAG

flag是一个标识位, 标识rewrite的类型

last 停止rewrite的检测
break 停止rewrite的检测
redirect 返回302临时重定向, 地址栏会显示跳转后的地址
permanent 返回301永久重定向, 地址栏会显示跳转后的地址(后面再次访问也会定向至该地址, 除非清理缓存)

break / last:

进入default.conf配置:

此时:

① 访问 http://192.168.19.136/test/  返回  {"status":"success"}

② 访问 http://192.168.19.136/break  返回  404

③ 访问 http://192.168.19.136/last  返回  {"status":"success"}

结论:

当访问带有/test/的url时, 默认返回{"status":"success"}; 当访问带有/break的url时, rewrite至/test/的路径下, 由于找不到该目录的存在, 返回404; 当访问带有/last的url时, rewrite至/test/的目录下, 再重新以这个rewrite的url进行又一次请求, 此时跟第①种情况一样, 所有返回{"status":"success"}.

redirect / permanent:

进入default.conf配置:

测试① redirect的效果

1) 把last开启, 注释掉redirect, 重启nginx, 访问: http://192.168.19.136/last

2) redirect开启, 注释掉last, 重启nginx, 继续访问: http://192.168.19.136/last

结论:

对于last, 则直接返回200, 对于redirect, 则会先重定向至指定地址, 返回302和重定向的地址, 并再次请求, 返回200.

测试② redirect和permanent的区别

1) redirect开启, permanent注释掉, 重启nginx, 访问: http://192.168.19.136/Milky-Way

此时关闭nginx服务, 并再次访问: http://192.168.19.136/Milky-Way

2) permanent开启, redirect注释掉, 访问: http://192.168.19.136/Milky-Way

此时关闭nginx服务, 并再次访问: http://192.168.19.136/Milky-Way

结论:

redirect: 临时重定向功能, 当nginx服务端关闭之后, 再次访问时会再次向服务端发出请求, 此时肯定无法给出响应, 也就无法访问成功;

permanent: 永久重定向功能, 当nginx服务端关闭之后, 再次访问时不需要再次向服务端发出请求, 此时直接跳转, 返回200状态码.

规则场景

场景① 

需要两台服务器: 192.168.19.136 和 192.168.19.143

136服务器配置:

143服务器配置: 需要新建一个121.html文件

启动服务器, 分别访问: 192.168.19.136/course-11-22-33.html / 192.168.19.136/nginx / 192.168.19.136/你好

结果:

③ 重定向至百度搜索

注: rewrite规则的优先级: rewrite规则书写在不同的地方其优先级不同(http域 > server域 > location域)

猜你喜欢

转载自blog.csdn.net/ip_JL/article/details/84422124
今日推荐