Nginx跳转配置
跳转场景
1、URL看起来更规范,合理
2、企业会将动态URL地址伪装成静态地址提供服务
3、网址换新域名后,让旧的访问跳转到新的域名上
4、服务端某些业务调整
实际场景
1.Nginx跳转需求的实现方式
使用rewrite进行匹配跳转
使用if匹配全局变量后跳转
使用location匹配再跳转
2.rewirte放在server{},if{},location{}段中
location只对域名后边的除去传递参数外的字符串起作用
3.对域名或参数字符串
使用if全局变量匹配 (重定向)
使用proxy_pass反向代理 (动静分离)
Nginx正则表达式
常用的正则表达式元字符
字符 说明
^ 匹配输入字符串的起始位置
$ 匹配输入字符串的结束位置
* 匹配前面的字符零次或多次
+ 匹配前面的字符一次或多次
? 匹配前面的字符零次或一次
. 匹配除“\n”(换行)之外的任何单个字符
\ 转义字符 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用(使用诸如“[.\n]”之类的模式,可匹配包括“\n”在内的任意字符)
\d 匹配纯数字 [0-9] 代替单个数字
{n} 重复n次
{n,} 重复n次或更多次
[c] 匹配单个字符c
[a-z] 匹配a-z小写字母的任意一个
[a-zA-Z] 匹配a-z小写字母或A-Z大写字母的任意一个
Rewrite命令
Rewrite命令语法
flag标记说明
last和break比较
(1)last:url重写后,马上发起一个新请求。再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏不变。
(2)break:url重写后,直接使用当前资源,不再使用location余下的语句,完成本次请求,地址栏不变。
总结:last和break在重定向后,地址栏都不会发生变化,这是它们的相同点,不同点在于last会写在server和if中,break是写在location中,last不会终止重写后的url匹配,break会终止重写后的url匹配。
location分类
分类
location = patt {} [精确匹配]
location patt {} [一般匹配]
location ~ patt {} [正则匹配]
正则匹配的常用表达式
loation优先级
1.相同类型的表达式,字符串长的会优先匹配
2.按优先级排列
= 类型 精确匹配
^~ 类型表达式 前缀匹配
正则表达式 (~和~*)类型
常规字符串匹配类型,按前缀匹配 一般匹配
通用匹配(/),如果没有其他匹配,任何请求都会匹配到 通用匹配
location优先级规则
(location = 完整路径)精确 > (location ^~ 完整路径) 前缀> (location ~* 完整路径 )正则 = (location ~ 完整路径) 正则> (location 完整路径)一般 > (location /)通用
用目录做匹配访问某个文件
(location = 目录)> (location ^~ 目录)>(location ~ 目录)=(location ~* 目录)>(location 目录)>(location /)
比较rewrite和location
相同点 :都可以实现跳转
不同点:
rewrite是在同一域名内更改获取资源的路径
location是对一类路径做控制访问或反向代理,还可以proxy_pass到其它机器
rewrite会写在location里,执行顺序
执行server块里面的rewrite指令
执行location匹配
执行选定的location中的rewrite指令
基于域名的跳转
场景:现在公司旧域名www. domain.com有业务需求有变更,需要使用新域名www.newdomain.com代替。
要求:
旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变.
配置环境:Nginx架构上
1、给windows配置映射
在C盘/Windows/system32/drivers/etc/hosts文件
文本形式打开文件
添加
20.0.0.13 www.domain.com www.newdomain.com
2、编辑配置文件
vi /etc/nginx.conf
####修改默认站点配置文件
server {
server_name www.domain.com;
if ($host = 'www.domain.com')
{
rewrite ^/(.*)$ http://www.newdomain.com/$1 permanent;
}
}
####添加新域名www