rewrite跳转

目录

rewrite跳转场景

rewrite跳转实现图

rewrite实际场景

反向代理

和rewrite的区别:

Nginx正则表达式

rewrite命令

Nginx优先级规则

分类:

location优先级

比较rewrite和location

总结:用目录做匹配访问某个文件

关于nginx配置文件

 rewrite实践

1.修改配置文件

2.基于客户端ip访问跳转

思路:

3.基于旧域名跳转到新域名后面加目录


rewrite跳转

rewrite跳转场景

URL看起来更规范,合理

企业会将动态URL地址伪装成静态地址提供服务

网址换新域名后,让旧的访问跳转到新的域名上

服务端某些业务调整

rewrite跳转实现图

  • rewrite实际场景

使用rewrite跳转需求的实现方式

(1)使用rewrite进行匹配跳转    实现跳转的模块

(2)使用if匹配全局变量后跳转   实现跳转的条件

(3)使用location匹配再跳转     匹配URL后跳转的条件

rewrite放在server{},if{},location{}段中

server {

location {

if{

rewrite

}

}

}

location只对域名后边的除去传递参数外的字符串起作用

对域名或参数字符串

(1)使用if全局比那辆匹配

(2)使用proxy_pass反向代理

反向代理

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

和rewrite的区别:

proxy可以进行不同节点间的跳转

rewrite进行同一个节点间的跳转

Nginx正则表达式

^                        匹配输入字符串的起始位置

$                        匹配输入字符串的结束位置

*                        匹配前面的字符零次或多次

+                        匹配前面的字符一次或多次

?                        匹配前面的字符零次或一次

.                        匹配除“\n"之外的任何单个字符

\                        将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用

\d                       匹配纯数字

{n}                      重复n次

{n,}                     重复n次或更多次

[c]                       匹配单个字符c

[a-z]                   匹配a-z小写字母的任意一个

[a-zA-Z]               匹配a-z小写字母或A-Z大写字母的任意一个

()                          表达式的开始和结束位置 例如:(jpg|gif|swf)

|                           或运算符

rewrite命令

  rewrite  <regx>   <replacement>   [flag];

regx:表示使用的正则表达式

<replacement>:跳转后的内容

[ag]:rewrite支持的flag标记

last:本条重写规则匹配完成后,终止匹配后续重写规则,并重新发起请求继续匹配新的location URI规则;浏览器地址栏URL地址不变

break:本条重写规则匹配完成后,终止匹配后续重写规则; 浏览器地址栏URL地址不变

redirect:返回302临时重定向,浏览器地址会显示重写后的URL地址

permanent:返回301永久重定向,浏览器地址会显示重写后的URL地址

Nginx优先级规则

分类:

location = patt {}[精确匹配]

location patt {} [一般匹配]

location ~ patt{}[正则匹配]

由上向下匹配

~            正则匹配的常用表达式

~*          执行一个正则匹配,区分大小写执行一个正则匹配,不区分大小写

!~           执行一个正则匹配,区分大小写不匹配

!~*         执行一个正则匹配,不区分大小写不匹配

^~         普通字符匹配;使用前缀匹配。如果匹配成功,则不再匹配其他location普通字符

=            精确匹配。也就是完全匹配

@           定义一个命名的location,使用在内部定向时

location优先级

相同类型的表达式,字符串长的会优先匹配即字符串越长越精确

按优先级排列

=类型                                 精确匹配

~类型表达式                     普通字符,匹配前缀

正则表达式(~和~*)类型      ~区分大小写~*不区分(考虑匹配的对象是文件还是目录)

常规字符串匹配类型,按前缀匹配

通用匹配(/) ,如果没有其它匹配,任何请求都会匹配到

比较rewrite和location

相同点

       都能实现跳转

不同点

       rewrite是在同一域名内更改获取资源的路径

location是对一类路径做控制访问或反向代理,还可以proxy_pass到其他机器

rewrite会写在location里,执行顺序

       执行server块里面的rewrite指令

执行location匹配

执行选定的location中的rewrite指令

总结:用目录做匹配访问某个文件

(location =目录) >(location ^~目录/) >(location ~目录)>(location ~*目录)>(location

目录)> ( location/ )

优先级总结(location优先级是怎么排列的):

匹配某个具体文件

(location = 完整路径) >(location ^。完整路径) >(location ~*完整路径) >(location~完整路径)>(location完整路径)> ( location/ )

index.html

if

多种location匹配

用目录微匹配访问某个文件

(location =目录) >(location ^~目录/)>(location ~目录) >(location ~*目录) >(location目录)>(location/)

文件目录为什么只会在区不区分大小写上会有变动正则表达式:目的是为了尽量精确的匹配

文件—》尽量精确匹配,区分大小写精确、不区分更为精确

目录—》尽量精确匹配,区分大小写精确优先级更高,不区分大小写的

关于nginx配置文件

nginx配置文件中location至少出现三种

静态匹配  动态匹配  根匹配 可以再写一个自定义匹配

根匹配

#第一个必选规则

直接匹配网站根,通过域名访问网站首页比较频繁(www.baidu.com/),使用这个会加速处理,

比如说官网。

可以是一"个静态首页,也可以直接转发给后端"应用服务器”—》PHP 、Apache

location = / {

roothtml;

index index.html index. htm;

}

#第二个必选规则是处理静态文件请求

这是nginx作为http服务器的强项(1、静态请求处理的

能力+高并发处理能力+资源消耗较低)

有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用

location ^~ l static/ {

root /webroot/ staticl ;

}

location ~* \. (html Igif ljpg ljpeglpnglcssljslico)$ {

root /webroot/res/ ;

}

#☆☆☆☆第三个规则就是通用规则!比如用来转发带.php、.jsp后缀的动态请求到后端应用服务非静态文件请求就默认是动态请求(跳转/反向代理)即静态匹配

 rewrite实践

1.修改配置文件

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

server {

listen             80 ;

server_name   www. kgc.com;  #域名修改

#charset koi8-r;

access_log/var/log/ nginx/ www. kgc.com-access.log;    #开启并对日志保存路径进行修改

location / {                                                                    #在原有location 位置插入

if ($host = 'www.lnj.com' ) {                             #$host为rewrite全局变量,代表请求主机头字段或主机名

rewrite ^/ (.*)$http: //www.benet.com/$1 permanent;

#$1为匹配的位置变量,即域名后边得字符串,同时永久跳转

root        html;

index      index.html     index.htm;

}

2.基于客户端ip访问跳转

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

server {

listen             80;

server_name www . lnj.com;

#charset koi8-r;

access_log/var/log/ nginx/www.kgc.com-access.log;

#设置是否是合法的IP标记

set $rewrite true;          #设置变量$rewrite,变量形式为布尔值为true

#判断是否为合法IP

if ($remote_addr = "192.168.239.129")(           #当客户端IP为192.168.226.132时,将变量值设为flase,不进行重写

set $rewrite false;

#除了合法IP,其它都是非法IP,进行重写跳转到维护页面

if ($rewrite = true){#布尔值表达式在不满足false情况下,会匹配满足true的location

rewrite (.+) /weihu.html; #重写在访问IP后边插入/weihu.html,例如192.168.226.160/weiu.html

}

location = / weihu. html {

root  /var/ www / html;      #页面返回/var/www / html/weihu. html的内容

location  /  {

roothtml;

indexindex.html index.htm;

}

思路:

(1)先对所有进入的访问请求,设置$rewrite=true的标签

(2)对访问来源为本地128的主机,重新设置标签为$rewrite=false

(3)对标签为$rewrite=true的来源主机,进行rewrite重写,指定其访问/weihu.html这个页面

(4)定义weihu . html页面所在的路径

PS:以上规则,自上而下匹配       

3.基于旧域名跳转到新域名后面加目录

当访问的是http://bbs.lnj.com/post/1.html

会自动跳转到http://www.benet.com/post/1.html

创建指定目录

mkdir -p /usr/local/nginx/html/bbs/post

echo “<h1>this is 1.html<h2>”>> /usr/local/nginx/html/bbs/post/1.html

echo “192.168.239.129 bbs.lnj.com”>> /etc/hosts

server {

listen    80;

server_name bbs.kgc.com;#修改域名

#charset koi8-r;

access_log /var/log/nginx/www.benet.com-access.log;   #修改日志名

#添加,旧:bbs.kgc.com/post/i.html

location /post{

rewrite (.+)http://www.benet.com/bbs$1 permanent;#这里$1为位置变量,代表/post

location  /  {

root  html;

index  index.html  index.htm;

}

systemctl stop nginx.service

systemctl start nginx.service

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值