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
此时,能够对原域名进行正常的访问
为了满足实验要求,现对新域名添加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
实验成功,成功从旧域名自动跳转到新域名
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地址,将会浏览到不同的页面(正常页面/维护页面)
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
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.html
→http://www.test.com/
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.php
→www.test.com
基于具体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.html
→www.test.com
基于任意的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格式的网页将自动跳转到首页
感谢阅读!!