一.rewrite跳转实现
- Nginx实现跳转通过ngx_http_rewrite_module模块
- 支持URL重写、支持if条件判断,但是不支持else
- 跳转时,循环最多可以执行10次,超过后nginx将返回500错误
二.rewrite实用场景
- 使用rewrite进行匹配跳转
- 使用if匹配全局变量后跳转
- 使用location匹配在跳转
- rewrite模块放在server{},if{},location{}段中
三.Nginx正则表达式
四.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
访问www.yun.com和www.kgc.com
修改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
基于客服端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
<h1>公司维护 </h1>
重启服务验证