Nginx服务——rewrite模块应用实战

Demo 1:基于域名的跳转

应用场景: 原域名即将不可用,现用新的域名代替

理论结果: 输入旧域名,自动跳转到新域名,且其它参数不变

DNS方向

[root@localhost ~]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm       //yum库升级
获取http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
警告:/var/tmp/rpm-tmp.zvmFF2: 头V4 RSA/SHA1 Signature, 密钥 ID 7bd9bf62: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:nginx-release-centos-7-0.el7.ngx ################################# [100%]
[root@localhost ~]# yum install nginx -y   #安装nginx服务
[root@localhost ~]# yum install bind -y
[root@localhost ~]# vim /etc/named.conf 
###按照下面进行修改
options {
        listen-on port 53 { any; };           #监听所有的53端口
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };            #允许所有通过

[root@localhost ~]# vim /etc/named.rfc1912.zones
####添加如下
zone "test.com" IN {
        type master;
        file "named.test";
};

[root@localhost ~]# cp -p /var/named/named.localhost /var/named/named.test
[root@localhost ~]# vim /var/named/named.test
#####按照下面进行修改
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
www IN  A       192.168.142.128

[root@localhost ~]# systemctl start named
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0

Nginx方向

[root@localhost ~]# vim /etc/nginx/conf.d/default.conf
####按下面进行更改
server {
    listen       80;
    server_name  www.test.com;          #指定域名

    charset utf-8;                      #指定字符集
    access_log  /var/log/nginx/test.com-access.log  main;     #指定access日志文件位置

[root@localhost ~]# systemctl start nginx
[root@localhost ~]# netstat -atnp | grep nginx 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4028/nginx: master

此时,能够对原域名进行正常的访问

nginx插件的后缀_应用实战

为了满足实验要求,现对新域名添加dns区域

[root@localhost ~]# vim /etc/nginx/conf.d/default.conf
location / {
####在location后面添加下面两行
        if ($host = 'www.test.com') {
            rewrite ^/(.*)$ http://www.yun.com/$1 permanent;
        }

[root@localhost ~]# vim /etc/named.rfc1912.zones
###为新域名增添新的dns区域
zone "yun.com" IN {
        type master;
        file "named.yun";
};

[root@localhost ~]# cp -p /var/named/named.test /var/named/named.yun
[root@localhost ~]# systemctl restart named
[root@localhost ~]# systemctl restart nginx

实验成功,成功从旧域名自动跳转到新域名

nginx插件的后缀_rewrite模块_02

Demo 2:基于客户端IP跳转

应用场景: 网站维护时仅有个别用户能够正常进行访问,其余用户仅能访问维护页面

理论结果: 一台客户机进行访问时自动进行IP比对,按表进行分类

DNS方向

同Demo 1,不用进行改变。

Nginx方向

[root@localhost ~]# vim /etc/nginx/conf.d/default.conf
####按下面进行添加
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

   set $ip true;        #设定变量为true
   if ($remote_addr = "192.168.142.129") {           #匹配IP地址为“192.168.142.129”时
       set $ip false;                      #变量变更为false
   }
   if ($ip = true) {              #匹配变量为true时
       rewrite ^/(.*)$ /weihu.html;      #跳转网页到维护页面
   }
   location = /weihu.html {       #匹配到维护页面时
       root /usr/share/nginx/html;      #指定网页站点
   }
   
[root@localhost ~]# systemctl restart nginx

此时,根据不同的ip地址,将会浏览到不同的页面(正常页面/维护页面)

nginx插件的后缀_rewrite模块_03


nginx插件的后缀_nginx_04

Demo 3:基于旧、新域名跳转并添加目录

应用场景: 将域名http://bbs.test.com下面的发帖都跳转到 http://www.test.com/bbs,且域名跳转后保持参数 不变

[root@localhost ~]# vim /etc/nginx/conf.d/default.conf
###按照下面进行修改,在location段下面添加
location /new {
#     if ($request_uri ~* ^/new) {
        rewrite /?(.*) http://www.test.com/bbs/$1 permanent;
}

[root@localhost ~]# systemctl restart nginx

nginx插件的后缀_nginx服务_05

Demo 4:基于参数匹配跳转到指定页面

应用场景: 用户在输入域名后,误输入了全为数字的错误页面,应用后将自动跳转回指定页面

理论结果: 基于正则表达式的选择

DNS方向

同上面所有,无需进行更改

Nginx方向

[root@localhost ~]# vim /etc/nginx/conf.d/default.conf
###按照下面进行修改,在location段下面添加
if ($request_uri ~* ^/(\d*).html$) {      #匹配以所有数字结尾的html文件
        rewrite (.*) http://www.test.com permanent;            #匹配零字或多字跳转到网站主页
    }
    
[root@localhost ~]# systemctl restart nginx

此时,在域名后添加一段数字组成的html网页将自动跳转回主页。例:http://www.test.com/123456.htmlhttp://www.test.com/

nginx插件的后缀_应用实战_06

Demo 5:基于PHP文件、具体页面跳转回首页

基于PHP文件

[root@localhost ~]# vim /etc/nginx/conf.d/default.conf
###按照下面进行修改
##location段后添加
location ~* /upload/(.+)\.php$ {         #基于全部php文件
        rewrite (.*) http://www.test.com permanent;
    }
    
[root@localhost ~]# systemctl restart nginx

没啥可说的,以php的文件均会自动跳转回首页

www.test.com/upload/test.phpwww.test.com

nginx插件的后缀_nginx插件的后缀_07

基于具体html页面

[root@localhost ~]# vim /etc/nginx/conf.d/default.conf
###按照下面进行修改
##location段后添加
    location ~* /test.html$ {           #基于具体的html网页
        rewrite (.*) http://www.test.com permanent;
    }
    
[root@localhost ~]# systemctl restart nginx

同上,访问某个具体网页文件就会跳转回首页
www.test.com/test.htmlwww.test.com

nginx插件的后缀_nginx插件的后缀_08

基于任意的html页面

[root@localhost ~]# vim /etc/nginx/conf.d/default.conf
###按照下面进行修改
##location /后面添加
 	if ($request_uri ~* ^/new/(.+)\.html$) {          #匹配到任意html页面
        rewrite (.*) http://www.test.com permanent;      #跳转到首页
     }
     
[root@localhost ~]# systemctl restart nginx

此时,访问任意的html格式的网页将自动跳转到首页

nginx插件的后缀_nginx_09

感谢阅读!!