进阶阶段的回顾:
Nginx进阶之静态Web资源服务
Nginx进阶之代理服务
Nginx进阶之负载均衡服务
Nginx进阶之缓存服务和动静分离
作用及应用场景
作用: 实现对URL的重写以及对匹配(正则表达式)的url的重定向
场景:
1. URL访问跳转, 支持开发设计
① 页面跳转 ② 兼容性支持 ③ 展示效果
2. SEO优化
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域)