Nginx服务--rewrite模块的规则与应用

一.rewrite跳转实现

  • Nginx实现跳转通过ngx_http_rewrite_module模块
  • 支持URL重写、支持if条件判断,但是不支持else
  • 跳转时,循环最多可以执行10次,超过后nginx将返回500错误

二.rewrite实用场景

  • 使用rewrite进行匹配跳转
  • 使用if匹配全局变量后跳转
  • 使用location匹配在跳转
  • rewrite模块放在server{},if{},location{}段中

三.Nginx正则表达式

Nginx服务--rewrite模块的规则与应用_第1张图片

四.rewrite与location比较

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

1.基于域名跳转应用

手工编译安装nginx服务


//解压缩包
tar zxvf nginx-1.12.2.tar.gz -C /opt

//创建用户
useradd -M -s /sbin/nologin nginx

//安装环境依赖包
yum install gcc gcc-c++ pcre pcre-devel zlib-devel -y

//配置
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

//创建软连接,便于管理服务命令
ln -s /usr/local/nginx/sbin/* /usr/local/sbin

//便于service管理服务
vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"

case "$1" in
 start)
        $PROG;;
 stop)
        kill -s QUIT $(cat $PIDF);;
 restart)
        $0 stop
        $0 start;;
 reload)
        kill -s HUP $(cat $PIDF);;
 *)
        exit 1
esac
exit 0

//添加执行权限
chmod +x /etc/init.d/nginx

//添加为系统服务
chkconfig --add nginx 

//启动服务
service nginx start
//验证服务
netstat -ntap | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5205/nginx: master  

安装DNS服务

//安装服务
yum install bind -y

//修改主配置文件
 vim /etc/named.conf
options {
        listen-on port 53 { any; };          //修改为any
        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; };            //修改为any


//修改区域配置文件,注:因为要跳转新域名,所以要解析俩个不同的域名
vim /etc/named.rfc1912.zones 
zone "yun.com" IN {               //解析的域名为yun
        type master;
        file "yun.com.zone";      //指向区域数据配置文件
        allow-update { none; };
};

zone "kgc.com" IN {               //解析的域名为kgc
        type master;
        file "kgc.com.zone";      //指向区域数据配置文件
        allow-update { none; };
};


//修改区域数据配置文件
cd /var/named/
cp -p named.localhost yun.com.zone
vim yun.com.zone
$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.179.186          //AAAA删掉,添加要解析的域名与IP地址

//复制一份改名为kgc的域名
cp -p yun.com.zone kgc.com.zone

//开启DNS服务
systemctl start named
netstat -ntap | grep named
tcp        0      0 192.168.179.186:53      0.0.0.0:*               LISTEN      5595/named          
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      5595/named          
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      5595/named          
tcp6       0      0 ::1:53                  :::*                    LISTEN      5595/named          
tcp6       0      0 ::1:953                 :::*                    LISTEN      5595/nam







修改客户机的DNS地址为192.168.179.186

Nginx服务--rewrite模块的规则与应用_第2张图片

访问www.yun.com和www.kgc.com

Nginx服务--rewrite模块的规则与应用_第3张图片

Nginx服务--rewrite模块的规则与应用_第4张图片

修改Nginx主配置文件,当客户机访问旧域名为www.yun.com时,要求自动跳转到新域名www.kgc.com并页面内容不变


vim /usr/local/nginx/conf/nginx.conf
//修改域名地址
server_name  www.yun.com;

//域名重定向
location / {
        if ($host = 'www.yun.com') {
                rewrite ^/(.*)$ http://www.kgc.com/$1 permanent;
        }
            root   html;
            index  index.html index.htm;
        }

重启服务验证

service nginx stop

service nginx start
Nginx服务--rewrite模块的规则与应用_第5张图片

Nginx服务--rewrite模块的规则与应用_第6张图片

基于客服端IP访问跳转,不是设定的IP地址访问,其他访问者都会跳转到固定网页,维护时可以常用,或者可以设定不同IP地址访问服务时,可以实现打开不同页面内容

vim /usr/local/nginx/conf/nginx.conf
//server段落添加
#设置是否合法的IP地址标志 
        set $rewrite true;
        #判断是否合法IP
        if ($remote_addr = "192.168.179.186") {
                set $rewrite false;
        }
        #非法IP进行判断打上标记 
        if ($rewrite = true) {
        rewrite (.+) /main.html;
        }
        #匹配标记进行跳转点 
        location = /main.html {                   
                root /usr/local/nginx/html;
         }


//创建维护页面,指向要跳转的目录页面
cd /usr/local/nginx/html
vim main.html

公司维护

重启服务验证

Nginx服务--rewrite模块的规则与应用_第7张图片

 

你可能感兴趣的:(Nginx服务)