web服务器- -Nginx 的rewrite模块配置,实现新旧域名自动跳转(Web服务器群集,各种nginx的rewrite实例配置,rewrite的语法,location的详解)

前言

Nginx 由内核和模块组成。
Nginx 本身做的工作实际很少,当它接到一个 HTTP 请求时, 它仅仅是通过查找配置文件将此次请求映射到一个 location block,而此 location 中所配 置的各个指令则会启动不同的模块去完成工作,因此模块可以看做 Nginx 真正的劳动工作者。

通常一个 location 中的指令会涉及一个 handler 模块和多个 filter 模块(当然,多个 location 可以复用同一个模块)。handler 模块负责处理请求,完成响应内容的生成,而 filter 模块对响应内容进行处理。 用户根据自己的需要所开发的模块都属于第三方模块。正是有了这么多模块的支撑, Nginx 的功能才会如此强大。

一:Rewrite

1.1:Rewrite跳转场景

URL看起来更规范、合理

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

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

服务端某些业务调整

1.2:Rewrite跳转实现

在这里插入图片描述

1.3:Rewrite实用场景

Nginx跳转需求的实现方式
使用 rewrite进行匹配跳转
使用if匹配全局变量后跳转
使用 location匹配再跳转
rewrite放在 server{},if{}, location{} 段中
对域名或参数字符串
使用if全局变量匹配
使用 proxy_pass反向代理

1.4. 正则表达式元字符

在这里插入图片描述

二:Rewrite命令

2.1:rewrite语法

在这里插入图片描述

2.2 flag 标记

在这里插入图片描述

2.3 last和break比较

在这里插入图片描述

三:location

3.1:location的分类

location = patt {} [精准匹配]
ocation patt {} [一般匹配 ]
location ~ patt {} [正则匹配]

3.1.1:正则匹配的常用表达式

在这里插入图片描述

3.2 location的优先级

相同类型的表达式,字符串长的会优先匹配
按优先级排列

= 类型
^~ 类型表达式
正则表达式 (和*)类型
常规字符串匹配类型,按前缀匹配
通用匹配(/),如果没有其他匹配,任何请求都会匹配到

3.3:rewrite和 location的不同之处

相同点
都能实现跳转
不同点
rewrite是在同一域名内更改获取资源的路径
location是对一类路径做控制访问或反向代理,还可以 proxy_pass到其他机器
write会写在 location里,执行顺序
执行 server块里面的 rewrite指令
执行 location匹配
执行选定的 location中的 rewrite指令

3.4:location优先级规则

匹配某个具体文件
( location = 完整路径)>( location ^~ 完整路径)>( location ~* 完整路径)>( location ~ 完整路径)>( location完整路径)>( location /)
用目录做匹配访问某个文件
( location = 目录)>( location ^~ 目录)>( location ~ 目录)>
( location ~* 目录)>( location 目录)>( location /

3.5:location优先级的示例

location = / {	'//精确匹配 /,主机名后面不能带任何字符串'
    [configuraion A ]	
}

location / {	'//所有的地址都以/开头,这条规则将匹配到所有请求,但正则和最长字符串会优先匹配'
    [configuraion B ]
}

location /documents/ {		'//匹配任何以/documents/开头的地址,当后面的正则表达式没有匹配到时,才起作用'
    [configuraion C ]
}

location ~ /documents/abc {		'//匹配任何以/documents/abc开头的地址,当后面的正则表达式没有匹配到时,才会起作用'
    [configuraion D ]
}

location ^~ /images/ {	'//以/images/开头的地址,匹配符合后,停止往下匹配'
    [configuraion E ]
}

location ~*\.(gif|jpg|gpeg)$ {	'//匹配所有以 gif, jpg或jpeg结尾的请求, Images/下的图片会被 [configuration E]处理,因为^~的优先级更高'
    [configuraion F ]
}

location /images/abc {	'//最长字符匹配到 /images/abc,优先级最低'
    [configuraion G ]
}

location ~ /images/abc {	'//以/ Images/abc开头的,优先级次之'
    [configuraion H ]
}

location /images/abc/1.html {	'//如果和正则 ~ images/abc/1.htm相比,正则优先级更高'
    [configuraion I ]

四. 具体6个配置实验

环境准备

手工编译安装nginx(实验中使用的是此nginx)

或者yum安装nginx

##yum安装nginx
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm	'//安装nginx源'
yum install nginx -y

VMware软件

一台centos7服务器(IP地址为192.168.100.55)

一台Windows主机(IP地址为192.168.100.66)

4.1:基于域名的跳转

4.1.1:需求
现在公司旧域名www.old.com有业务需求有变更,需要使用新域名www.new.com代替,但是旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变
[root@ shanan ~]# vim /etc/nginx/conf.d/default.conf
在这里插入图片描述

if ($host = 'www.old.com'){
              rewrite ^/(.*)$ http://www.new.com/$1 permanent;
       }

[root@ shanan ~]# vim /etc/named.conf

[root@ shanan ~]# vim /etc/named.rfc1912.zones
在这里插入图片描述

[root@ shanan ~]# cd /var/named
[root@ shanan named]# cp -p named.localhost old.com.zone
[root@ shanan named]# cp -p named.localhost new.com.zone

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 基于客户端IP访问跳转

4.2.1:需求:
今天公司业务版本上线,任何访问者都跳转一个固定维护页面,只有公司IP(192.168.100.60)访问正常

在这里插入图片描述

server {
    listen       80;
    server_name  www.old.com;

    #charset koi8-r;
    access_log  /var/log/nginx/www.old.com-access.log  main;
   set $rewrite true;
   if ( $remote_addr = "192.168.100.66"){
        set $rewrite false;
   }
     if ( $rewrite = true ){=
        rewrite (.+) /error.html;
   }

    location = /error.html {
    root   /usr/share/nginx/html;
    }
[root@ shanan html]# ls
50x.html  error.html  index.html
[root@ shanan html]#
Vi error.html

在这里插入图片描述

地址非法, 你无权限访问,BYE

访问测试:
在这里插入图片描述

在这里插入图片描述

4.3基于旧新域名跳转并加目录

4.3.1:需求:
基于旧域名跳转到新域名后面加目录,例如现在访问的是htp://bbs.old.com/post,现在需要将这个域名下面的发帖都跳转到http://www.old.com/bbs注意保持域名跳转后的参数不变

server {
    listen       80;
    server_name  bbs.old.com;

    #charset koi8-r;
    access_log  /var/log/nginx/www.old.com-access.log  main;
    location /post {
          rewrite (.+) http://www.old.com/bbs$1 permanent;
     }

    location / {
    root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.4:基于参数匹配的跳转

4.4.1:需求
例如现在访问http://www.old.com/100-(100|200)-100.html跳转到http://www.new.com页面

server {
    listen       80;
    server_name  www.old.com;

    #charset koi8-r;
    access_log  /var/log/nginx/www.old.com-access.log  main;

    location ~* /upload/.*\.php$ {
          rewrite (.+) http://www.old.com permanent;
    }

    location / {
    root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

在这里插入图片描述在这里插入图片描述在这里插入图片描述

4.5:基于目录upload下有php文件结尾的文件跳转

4.5.1:需求
访问一个没有登录的购物页面跳转到首页

server {
    listen       80;
    server_name www.old.com;

    #charset koi8-r;
    access_log  /var/log/nginx/www.old.com-access.log  main;

    location ~* /upload/.*\.php$ {
          rewrite (.+) http://www.old.com permanent;
    }

    location / {
    root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

在这里插入图片描述
在这里插入图片描述

4.6:基于最普通URL请求的跳转

4.6.1:需求
访问一个具体的页面跳转到首页

server {
    listen       80;
    server_name  www.old.com;

    #charset koi8-r;
    access_log  /var/log/nginx/www.old.com-access.log  main;

    location ~* ^/abc/test.html {
          rewrite (.+) http://www.old.com permanent;
    }

    location / {
    root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值