关于Nginx跳转的常用场景模拟
一、Nginx跳转介绍:
现在Nginx已经成为很多公司作为前端反向代理服务器的首选,在实际工作中往往会遇到很多跳转(重写uRL)的需求。
比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。
如果在后端使用的 Apache服务器,虽然也能做跳转,规则库也很强大,但是用 Nginx跳转效率会更高。
二、常用场景
①URL看起来更规范、合理;
②为了让搜索引擎搜索网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务;(动态地址中有?:隐藏具体位置)
③网址更换域名后,让旧的访问跳转到新的域名上;
④服务端某些业务调整,比如根据特殊变量、目录、客户端信息进行URL调整等。
三、常用场景模拟
1、基于域名的跳转:
公司旧域名www.lrz.com有业务需求变更,需要使用新域名www.liuruizhi.com代替,但是旧域名不能废除,需要跳转到新域名,并且保持后面参数不变。
步骤:
①添加映射:
vim /etc/hosts
192.168.65.139 www.liuruizhi.com www.lrz.com
②创建日志目录:
mkdir -p /var/log/nginx/
③修改配置文件:
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.lrz.com; #域名修改
#charset koi8-r;
access_log /var/log/nginx/www.lrz.com-access.log; #开启并对日志保存路径进行修改
location / { #在原有location位置插入
if ($host = 'www.lrz.com'){ #$host为rewrite全局变量,代表请求主机头字段或主机名
rewrite ^/(.*)$ http://www.liuruizhi.com/$1 permanent; #$1为匹配的位置变量,即域名后边的字符串,同时永久跳转
}
}
{
----->wq
④重启服务:
systemctl restart nginx.service
这是,所有www.lrz.com的访问都会跳转到www.liuruizhi.com;
并且www.lrz.com/1.html会报错并且域名变为www.liuruizhi.com/1.html
2、基于客户端IP访问跳转:
公司业务新版本上线,要求所有IP访问任何内容都显示一个固定维护页面,只有公司IP 192.168.65.129访问正常。
注:先删除上一个实验配置。
步骤
①配置配置文件:
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.lrz.com;
#charset koi8-r;
access_log /var/log/nginx/www.lrz.com-access.log;
#设置是否是合法的IP标记
set $rewrite true; #变量为$rewrite,布尔值为true
#判断是否为合法IP
if ($remote_addr = "192.168.65.129"){ #当客户端IP为192.168.65.129时,变量设置为false,不进行重写
set $rewrite false;
}
#除了合法IP,其他为非法IP,重写跳转到维护页面
if ($rewrite = true){ #布尔值为true,重写
rewrite (.+) /weihu.html; #重写在访问IP后插入/weihu.html
}
location = /weihu.html {
root /var/www/html; #页面返回/var/www/html/weihu.html的内容
}
location / {
}
}
------->wq
②创建维护页面
mkdir -p /var/www/html
echo '<h1>this is weihu web!</h1>' > /var/www/html/weihu.html
systemctl restart nginx.service
注:win10虚拟机:在windows/system32/drivers/etc下hosts添加映射
3、基于旧域名跳转到新域名后加目录:
当访问的是bbs.lrz.com,现在需要将这个域名下面的访问都跳转到www.liuruizhi.com/bbs下。
步骤
①创建指定目录:
mkdir -p /usr/local/nginx/html/bbs/post
echo "<h1>this is 1.html</h1>" >> /usr/local/nginx/html/bbs/post/1.html
echo "192.168.65.129 bbs.lrz.com" >> /etc/hosts
②改配置文件:
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name bbs.lrz.com; #修改域名
#charset koi8-r;
access_log /var/log/nginx/www.liuruizhi.com-access.log; #修改日志名
#添加
location /post {
rewrite (.+) http://www.liuruizhi.com/bbs$1 permanent;
}
location / {
}
}
------->wq
③重启服务
4、基于参数匹配(多余的)的跳转:
访问 www.lrz.com/100-(100|200)-100.html 会跳转到www.lrz.com。
步骤
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.lrz.com; #修改域名
#charset koi8-r;
access_log /var/log/nginx/www.lrz.com-access.log; #修改日志名
#$request_uri内置变量,便是URI,\d纯数字
if ($request_uri ~ ^/100-(100|200)-(\d+)\.html$){
#设置正则匹配
rewrite (.*) http://www.lrz.com permanent;
}
}
----->wq
重启服务
5、基于目录下所有php结尾的文件跳转:
要求访问 http://www.lrz.com/upload/123.php 跳转到首页。
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.lrz.com; #修改域名
#charset koi8-r;
access_log /var/log/nginx/www.lrz.com-access.log;
location ~* /upload/.*\.php$ {
rewrite (.+) http://www.lrz.com permanent;
}
}
--->wq
重启服务
6、基于最普通一条url请求的跳转:
要求访问到一个具体的页面:www.lrz.com/abc123.html,跳转到首页。
步骤
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.lrz.com; #修改域名
#charset koi8-r;
access_log /var/log/nginx/www.lrz.com-access.log;
location ~* /abc/123.html {
rewrite (.+) http://www.lrz.com permanent;
}
}
--->wq
重启服务
四、小结:
nginx:
1、了解nginx和Apache的区别/对比:
轻量级:
定位:nginx–静态页面处理,七层应用层,http https协议
静态页面处理:最高3-5w并发
2、LNMP(结合nginx体验)
体验:nginx如何与php的fpm对接,实现动静分离
3、nginx优化与防盗链
nginx是企业中运行较多的服务之一
nginx优化—>提高用户体验,提高服务端性能
4、nginx跳转
目的:
服务体验
基于不同场景精确匹配访问的URL,指引跳转到合适的新场景
nginx跳转3种方式:
rewrite
if
location