文章目录
一、使用yum安装nginx服务:
(1)第一步:安装源:
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
(2)第二步:直接用yum安装:
yum install nginx -y
二、Rewrite 介绍:
(1)Rewrite跳转场景:
- URL 看起来更规范、合理;
- 企业会将动态URL地址伪装成静态地址提供服务;
- 网址换域名后,让旧的访问跳转到新的域名上;
- 服务端某些业务调整
(2)Rewrite 跳转实现:
(3)Rewrite 实用场景:
1、Nginx跳转需求的实现方式:
- 使用rewrite进行匹配跳转;
- 使用if匹配全局变量后跳转;
- 使用location 匹配再跳转
2、rewrite放在 server { },if { };location{ }段中;
3、对域名或参数字符串:
- 使用 if 全局变量匹配;
- 使用 proxy_pass 反向代理
(4)常用的正则表达式元字符:
(5)Rewrite 命令:
语法:
(6)location 分类:
1、分类:
- location = patt { } [精准匹配]
- location patt { } [一般匹配]
- location ~ patt { } [正则匹配]
2、正则匹配的常用表达式:
(7)location 优先级:
1、相同类型的表达式,字符串长的会优先匹配;
2、按优先级排列:
- = 类型
- ^~ 类型表达式
- 正则表达式(~ 和 ~*)类型
- 常规字符串匹配类型,按前缀匹配
- 通用匹配(/),如果没有其他匹配,任何请求都会匹配到
(8)location 优先级规则:
1、匹配某个具体文件:
2、用目录做匹配访问某个文件:
三、具体应用场景:
场景一:基于域名的跳转
(1)实验环境:公司旧域名:www.accp.com,因业务需求有变更,需要使用新的域名www.kgc.com来代替旧域名。
(2)实验要求:
- 不能废除旧域名;
- 从旧域名跳转到新域名,且保持其参数不变
未进行域名跳转之前服务旧域名时:
第一步:修改nginx配置文件,/etc/nginx/conf.d/default.conf
在location{ }段加入以下代码:
if ($host = 'www.accp.com'){
rewrite ^/(.*)$ http://www.kgc.com/$1 permanent;
}
//域名重定向:表示当访问域名www.accp.com时,将自动跳转到www.kgc.com域名,permanent表示永久的意思
第二步:重启nginx服务
[root@nginx ~]# systemctl stop nginx.service
[root@nginx ~]# systemctl start nginx.service
第三步:再在网页上访问 www.accp.com,就会自动跳转到新的域名www.kgc.com,但是网页内容不变的。
如果在网页后面加参数,还是会跟着域名一起跳转的。
场景二:基于客户端 IP访问跳转
实验要求:今天公司业务版本上线,所有IP访问任何内容都显示一个固定维护页面,只有公司的IP才能访问正常。
PC1(公司 ip) | PC2 |
---|---|
192.168.220.128 | 192.168.220.132 |
第一步:修改nginx配置文件,添加以下代码
set $rewrite true; //设置是否合法的IP标志
if ($remote_addr = "192.168.220.128"){
set $rewrite false;
} //判断是否为合法IP
if ($rewrite = true){
rewrite (.+) /main.html;
} //非法IP进行判断打上标记
location = /main.html {
root /usr/share/nginx/html;
} //匹配标记进行跳转站点
第二步:重启nginx服务
第三步:现在这两台PC机同时访问公司官网 www.accp.com
1、PC1上显示如下:
2、PC2上显示如下:
场景三:基于新、旧域名跳转并加目录
例如:现在访问的是 http://bbs.accp.com ,现在需要将这个域名下面的发帖都跳转到 http://www.accp.com/bbs,注意保持域名跳转后的参数不变。
第一步:在nginx配置文件中添加以下代码
location /post {
rewrite (.+) http://www.accp.com/bbs$1 permanent;
}
第二步:重启服务
第三步:在客户机上访问 http://bbs.accp.com/post/a.html ,会帮我们自动跳转到http://www.accp.com/bbs/post/a.html , 此时域名跳转后的参数并没有变还是bbs
场景四:基于参数匹配的跳转
例如:浏览器访问,http://www.accp.com/100-(100|200)-100.html,会自动跳转到 http://www.accp.com 的页面。
第一步:修改nginx的配置文件,添加以下代码
if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
rewrite (.*) http://www.accp.com permanent;
}
第二步:重启服务
第三步:在浏览器访问 http://www.accp.com/100-100-100.html,就会帮我们自动跳转到www.accp.com网站
场景五:基于目录下所有的 php文件跳转
例如,我们访问 http://www.accp.com/upload/1.php ,会自动跳转到首页www.accp.com
第一步:在nginx配置文件中加入以下代码
location ~* /upload/.*\.php$ {
rewrite (.+) http://www.accp.com permanent;
}
第二步:重启服务
第三步:在浏览器上访问 http://www.accp.com/upload/a.php ,就会帮我们自动跳转到 www.accp.com网页。
场景六:基于最普通 url请求的跳转
场景说明,我们访问一个具体的页面都会帮我们跳转到首页www.accp.com
例如,我们在网页上访问一个具体网址 http://www.accp.com/1/test.html ,就会帮我们跳转到首页 www.accp.com
第一步:在nginx配置文件中添加以下代码
location ~* ^/1/test.html{
rewrite (.+) http://www.accp.com permanent;
}
第二步:重启服务
第三步:在网页上访问http://www.accp.com/1/test.html ,会自动跳转到 www.accp.com