Nginx Rewrite模块
1、Nginx跳转需求
使用rewrite进行匹配
使用if匹配全局变量后跳转
使用location匹配再跳转

2、rewrite跳转场景
使url看起来更规范,合理
可将动态url地址伪装成静态地址提供服务
网址换新域名后,让旧的访问跳转到新的域名上

3、rewrite跳转实现
ngx_http_rewrite_module模块:
Nginx,支持url重写,if条件判断,但不支持else
循环最多执行10次,超过10次后Nginx将返回500错误
支持pcre(正则表达式)
重写模块set指令

4、Nginx常用的正则表达式

字符    说明
 ^    匹配输入字符串的其实位置
 $    匹配输入字符串的结束位置
 *    匹配前面的字符零次或多次
 +    匹配前面的字符一次或多次
 ?    匹配前面的字符零次或一次
 .    匹配除“\n”之外的任何单个字符
 \    将后面接着字符标记为一个特殊字符或一个原义字符或一个向后引用
 \d    匹配纯数字
 {n,}    重复n次或更多次
 {n }    重复n次
 [c]    匹配单个字符c
 [a-z[    匹配a-z小写字母的任意一个
 [a-zA-Z]    匹配a-z小写字母或A-Z大写字母的任意一个
 5、Rewrite命令语法
 rewrite  正则<regex>   跳转后内容<replacement>   标记<flag>6、flag标记说明
 标记    说明
 last    相当于Apache的[L] 标记,表示完成rewrite
 break    本条规则匹配完成即终止,不再匹配后面的任何规则
 redirect    返回302临时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更新url
 permanent    返回301永久重定向, 浏览器地址栏会显示跳转后的URL地址,爬虫更新url
 last和break比较·    使用场景    URL匹配
 last    一般写在server和if中    不终止重写后的url匹配
 break    一般使用在location中    终止重写后的url匹配
 location
 location 的三大类
 精准匹配:location = / {…} 精确匹配字符串
 一般匹配:location / {…} 只要包含…的字符串即可
 正则匹配:location ~ / {…} 按照正则表达方式匹配location常用的匹配规则
 =    进行普通字符精确匹配,也就是完全匹配
 ^~    表示普通字符匹配。 使用前缀匹配,如果匹配成功,则不再匹配其他 loacaion
 ~    区分大小写的匹配
 ~ *    不区分大小写的匹配
 !~    区分大小写的匹配取非
 @    定义一个location,使用在内部定向的时候
 location 优先级
 相同类型的表达式,字符串长的优先匹配
 首先精确匹配 =
 其次前缀匹配 ^ ~
 其次是按文件中顺序的正确匹配 ~ 或 ~*
 然后匹配不带任何修饰的前缀匹配
 最后交给 / 通用匹配,如果没有其他匹配,任何请求都会匹配到rewrite 和 location的比较
 相同点
 都可以实现跳转
 不同点
 rewrite实在同一域名内更改获取资源的路径
 location是对一类路径做控制访问或反向代理,还可以proxy_pass到其他机器
 rewrite会写在location里,执行顺序操作
 添加映射
  vim /etc/hosts

nginx 支持txt nginx 支持patch_正则表达式

 创建日志目录

mkdir -p /var/log/nginx

修改配置文件

vim /usr/local/nginx/conf/nginx.conf

设置跳转

nginx 支持txt nginx 支持patch_nginx_02

 结果

nginx 支持txt nginx 支持patch_Nginx_03

 

基于ip地址的跳转

进入配置文件

nginx 支持txt nginx 支持patch_nginx_04

 

nginx 支持txt nginx 支持patch_Nginx_05

 

基于旧域名跳转到新域名的加目录

进入配置文件

vim /usr/local/nginx/conf/nginx.conf

nginx 支持txt nginx 支持patch_Nginx_06

 创建目录并重启

 mkdir -p /usr/local/nginx/html/bbs/post  #创建目录
 cd  /usr/local/nginx/html/bbs/post
vim 1.html
 cat /usr/local/nginx/html/bbs/post/1.html
this is 1.html
 systemctl stop nginx   #开启服务
 systemctl start  nginx

nginx 支持txt nginx 支持patch_正则表达式_07

 

基于目录下所有php结尾的文件跳转

修改配置文件

nginx 支持txt nginx 支持patch_Nginx_08

 重启nginx服务

systemctl stop nginx #开启服务

systemctl start nginx

nginx 支持txt nginx 支持patch_nginx_09

 

基于URL的跳转

修改配置文件

nginx 支持txt nginx 支持patch_Nginx_10

 

nginx 支持txt nginx 支持patch_运维_11

 总结

Nginx rewrite 跳转
 目的
 ①服务体验
 ②基于不同场景,精确匹配访问URL,指引跳转合适的场景(新的URL)
 方式
 rewrite
 if
 location
 location 优先级顺序
 1、精确匹配
 2、正则前缀匹配 ^~
 3、~ * 和 ~ (目录或者文件,如果是目录 ~ 优先级大于 ~ * 如果是文件 ~* 优先级大与 ~)
 4、普通匹配
 5、/