Nginx_rewrite跳转
一、概述
1.1Rewrite 跳转场景
-
URL看起来更规范、合理
-
企业会将动态URL地址伪装成静态地址提供服务
-
网址换新域名后,让旧的访问跳转到新的域名上
-
服务端某些业务调整
1.2.Rewrite 实际场景
1.2.1Nginx跳转需求的实现方式
- 使用rewrite进行匹配跳转
- 使用if匹配全局变量后跳转
- 使用location匹配再跳转
1.2.2rewrite放在server{}, if{}, location{} 段中
location只对域名后边的除去传递参数外的字符串起作用
1.2.3对域名或参数字符串
- 使用if全局变量匹配
- 使用proxy_pass反向代理
1.3 rewrite和location对比
1.3.1相同点
- 都能实现跳转
1.3.2不同点
- rewrite是在同一域名内更改获取资源的路径
- location是对一-类路径做控制访问或反向代理,还可以proxy_ pass到其他机器
1.3.3rewrite会写在location里,执行顺序
- 执行server块里面的rewrite指令
- 执行location匹配
- 执行选定的location中的rewrite指令
1.4 location优先级规则
1、匹配某个具体文件
(location=完整路径) > (location ^~完整路径) > (location ~*完整路径) > (location ~完整路径) > (location完整路径) >(location /)
2、用目录做匹配访问某个文件人
(location=目录) > (location ^~且录/) > (location~目录) >(location~*目录) > (location目录) > (location /)
二、nginx rewrite实验
2.1基于域名跳转
公司旧域名www.kgc.com,因业务需求有变更,需要使用新域名www.newkgc.com代替
● 不能废除旧域名
● 从旧域名跳转到新域名,且保持其参数不
2.1.1.安装nginx源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2.1.2安装nginx软件包
yum install -y nginx
2.1.3安装DNS服务
yum -y install bind
修改dns主配置文件
vim /etc/named.conf.
配置dns区域配置文件
vim /etc/named.rfc1912.zones
配置dns区域数据配置文件
复制一份区域数据配置文件模板
cp -p /var/named/named.localhost /var/named/kgc.com.zone
vim /var/named/kgc.come.zone
cp -p /var/named/kgc.com.zone /var/named/newkgc.com.zone
开启域名解析服务
systemctl start named
2.1.4改nginx默认站点配置文件
[root@localhost ~]# rpm -qc nginx
/etc/logrotate.d/nginx
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
vim /etc/nginx/conf.d/default.conf
location /{ 下面插入下面三行
if ( $host = 'www.kgc.com') {
rewrite ^/(.*)$ http://www.newkgc.com/$1 permanent;
}
[root@localhost named]# nginx -t 检查修改配置时有没有语法错误
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost named]# vim /etc/nginx/conf.d/default.conf
[root@localhost named]# systemctl start nginx 开启nginx服务
[root@localhost named]# netstat -napt |grep nginx 查看是否开启
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11161/nginx: master
2.1.5设置测试机域名解析服务有服务机解析
2.1.6测试
访问www.kgc.com查看是否会自动跳转到www.newkgc.com
2.2基于客户端ip访问跳转
今天公司业务版本上线,所有ip访问任何内容都显示一个固定维护页面,只有公司ip访问正常
vim /etc/nginx/conf.d/default.conf
set $rewrite true;
if ( $remote_addr = '14.0.0.14') {
set $rewrite false;
}
if ($rewrite = true ) {
rewrite (.+)/error.html;
}
location = /error.html {
编写错误首页文件
cd /usr/share/nginx/html
vim error.html
测试非指定ip访问
指定ip访问
2.3 基于旧、新域名跳转并加目录
将域名http://old.kgc.com 下面的发帖都跳转到http://www.kgc.com,且域名跳转后
保持参数不变
vim /etc/nginx/conf.d/default.conf
更改解析的域名
测试
2.4基于参数匹配的跳转
http://www.kgc.com/100-(100|200)-100.html
到跳转http://www.kgc.com页面
vim /etc/nginx/conf.d/default.conf
if (KaTeX parse error: Undefined control sequence: \d at position 32: …100-(100|200)-(\̲d̲+).html) {
rewrite (.*)http://www.kgc.com permanent;
测试
访问http://www.kgc.com/100-100-100.html
2.5基于目录下所有php文件跳转
访问http://www.kgc.com/upload/1.php
location ~* /upload/..php$ {
rewrite (.) http://www.kgc.com permanent;
2.6基于最普通的url请求的跳转
location ~* ^/1/test.html {
rewrite (.+) http://www.kgc.com permanent;
.php$ {
rewrite (.) http://www.kgc.com permanent;
[外链图片转存中…(img-lKt1whMx-1597500669438)]
[外链图片转存中…(img-JKcwgGmg-1597500669438)]
2.6基于最普通的url请求的跳转
location ~* ^/1/test.html {
rewrite (.+) http://www.kgc.com permanent;