【运维知识进阶篇】集群架构-Rewrite重定向

news2024/12/23 13:58:52

Rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程。

分以下几种场景使用

1、地址跳转,用户访问一个URL,将其定向到另一个URL

2、协议跳转,用户通过http协议请求网站时,将其重新跳转至https协议方式

3、伪静态,动态页面静态化,为了搜素引擎收录。

4、搜索引擎,SEO优化依赖于url路径,好记的url便于支持搜索引擎录入

Rewrite标记

每个Rewrite后面都有flag标记,主要有以下几种

flag规则
last停止当前匹配,并重新发送请求
barek终止匹配,不发送新请求
redirector临时跳转,关闭nginx请求就不跳转了,302
premanent永久跳转,访问过一次就不会访问原站了,301,第一次请求会保存缓存到浏览器中,通过浏览器缓存跳转

更改配置文件,准备代码文件进行测试last与break

[root@Web01 conf.d]# vim rewrite.conf
server {
        listen 80;
        server_name rewrite.koten.com;
        root /code/rewrite/;

        location / {
        rewrite /1.html /2.html;
        rewrite /2.html /3.html;
        }

        location /2.html {
        rewrite /2.html /a.html;
        }

        location /3.html {
        rewrite /3.html /b.html;
"rewrite.conf" 18L, 343C written 
[root@Web01 conf.d]# systemctl restart nginx
[root@Web01 conf.d]# mkdir -p /code/rewrite
[root@Web01 conf.d]# echo 1.html > /code/rewrite/1.html
[root@Web01 conf.d]# echo 2.html > /code/rewrite/2.html
[root@Web01 conf.d]# echo 3.html > /code/rewrite/3.html
[root@Web01 conf.d]# echo a.html > /code/rewrite/a.html
[root@Web01 conf.d]# echo b.html > /code/rewrite/b.html

发现访问1.html,实际重定向到了b.html 

添加last标记

[root@Web01 conf.d]# vim rewrite.conf
server {
        listen 80;
        server_name rewrite.koten.com;
        root /code/rewrite/;

        location / {
        rewrite /1.html /2.html last;
        rewrite /2.html /3.html;
        }

        location /2.html {
        rewrite /2.html /a.html;
        }

        location /3.html {
        rewrite /3.html /b.html;
"rewrite.conf" 18L, 348C written 
[root@Web01 conf.d]# systemctl restart nginx

 跳过了当前location,进行下一location重定向,最终跳转到a.html

 

添加down标记

[root@Web01 conf.d]# vim rewrite.conf
server {
        listen 80;
        server_name rewrite.koten.com;
        root /code/rewrite/;

        location / {
        rewrite /1.html /2.html break;
        rewrite /2.html /3.html;
        }

        location /2.html {
        rewrite /2.html /a.html;
        }

        location /3.html {
        rewrite /3.html /b.html;
"rewrite.conf" 18L, 349C written 
[root@Web01 conf.d]# systemctl restart nginx

break后不再进行重定向操作,最终定向到2.html 

 redirect与permanent测试

[root@Web01 conf.d]# vim rewrite.conf
server {
        listen 80;
        server_name rewrite.koten.com;
        root /code;

        location /test {
                #临时重定向
                rewrite ^(.*)$  http://www.koten.vip redirect;    
                #return 302 http://www.koten.vip

                #永久重定向
                #rewrite ^(.*)$  http://www.koten.vip permanent;  
                #return 301 http://www.koten.vip;
        }
}
~                                                  
~                                                  
"rewrite.conf" 12L, 356C written 
[root@Web01 conf.d]# systemctl restart nginx

 访问rewrite.koten.com/test,定向到www.koten.vip

Rewrite使用案例

我们先开启rewrite日志对规则进行匹配调试

 rewrite_log on;  #加入到/etc/nginx/nginx.conf中

案例1:用户访问/abc/1.html实际上真实访问的是/ccc/bbb/2.html中

[root@Web01 conf.d]# mkdir -p /code/rewrite/ccc/bbb/
[root@Web01 conf.d]# echo '/ccc/bbb/2.html' > /code/rewrite/ccc/bbb/2.html
[root@Web01 conf.d]# vim rewrite.conf
server {
        listen 80;
        server_name rewrite.koten.com;
        root /code/rewrite;

        location /abc {
                rewrite (.*) /ccc/bbb/2.html redirect;
                #return 302 /ccc/bbb/2.html
        }
}
~                                                  
~                                                  
~                                                  
~                                                  
~                                                  
"rewrite.conf" 10L, 217C written 
[root@Web01 conf.d]# systemctl restart nginx

案例2:用户访问/2018/ccc/bbb/2.html实际上真实访问的是/2023/ccc/bbb.2.html

[root@Web01 conf.d]# mkdir -p /code/rewrite/2023/ccc/bbb/
[root@Web01 conf.d]# echo '/2023/ccc/bbb/2.html' > /code/rewrite/2023/ccc/bbb/2.html
[root@Web01 conf.d]# vim rewrite.conf
server {
        listen 80;
        server_name rewrite.koten.com;
        root /code/rewrite;

        location /2018 {
                rewrite ^/2018/(.*) /2023/$1 redirect;
        }
}
~                                                  
~                                                  
~                                                  
~                                                  
~                                                  
~                                                  
"rewrite.conf" 9L, 188C written  
[root@Web01 conf.d]# systemctl restart nginx

案例3:用户访问/test实际上访问的是https://www.koten.vip

[root@Web01 conf.d]# vim rewrite.conf
server {
        listen 80;
        server_name rewrite.koten.com;

        location /test {
                rewrite (.*) https://www.koten.vip redirect;
        }
}
~                                                  
~                                                  
~                                                  
~                                                  
~                                                  
~                                                  
~                                                  
"rewrite.conf" 8L, 154C written
[root@Web01 conf.d]# systemctl restart nginx

案例4:访问course-11-22-33.html实际真实访问/course/11/22/33/course_33.html

[root@Web01 conf.d]# mkdir -p /code/rewrite/course/
11/22/33
[root@Web01 conf.d]# echo '/code/rewrite/course/11/22/33' >
/code/rewrite/course/11/22/33/course_33.html
[root@Web01 conf.d]# vim /etc/nginx/conf.d/rewrite.conf 
server {
        listen 80;
        server_name rewrite.koten.com;
        root /code/rewrite;
        index index.html;

        location / {
                rewrite ^/course-(.*)-(.*)-(.*).html$ /course/$1/$2/$3/course_$3.html redirect;
        }
}
~                                                  
~                                                  
~                                                  
~                                                  
~                                                  
"rewrite.conf" 10L, 230C written 
[root@Web01 conf.d]# systemctl restart nginx

 案例5:将http请求跳转到https

[root@Web01 conf.d]# vim /etc/nginx/conf.d/rewrite.conf
server {
        listen 443;
        server_name rewrite.koten.com;

        location / {
                root /code;
                index index.php index.html;
        }
}

server {
        listen 80;
        server_name rewrite.koten.com;

        rewrite ^(.*) https://$server_name$1 redire
ct;
"rewrite.conf" 17L, 285C written 
[root@Web01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@Web01 conf.d]# systemctl restart nginx

案例6:错误页跳转

[root@Web01 rewrite]# cat /etc/nginx/conf.d/rewrite.conf
server {
        listen 80;
	server_name rewrite.koten.com;

        root /code/rewrite;

        error_page 403 404 500 501 502 @error_test;
        location @error_test {
        rewrite ^(.*)$ /404.png break;
        }
}

[root@Web01 rewrite]# systemctl restart nginx

案例7:在跳转的请求行后加上想要的参数&showoffline=1

[root@Web01 rewrite]# vim /etc/nginx/conf.d/rewrite.conf
server {
    listen 80;
    server_name rewrite.koten.com;

    set $args "&showoffline=1";
    location / {
        root /code/rewrite;
        index index.html;
    }
    if ($remote_addr = 10.0.0.1 ){
        rewrite (.*) http://rewrite.koten.com$1;
    }
}
~                                                  
~                                                  
~                                                  
<rewrite.conf" 13L, 252C written 
[root@Web01 rewrite]# systemctl restart nginx

 

案例8:网站维护,指定IP正常访问,其他IP跳转至维护页面

[root@Web01 rewrite]# vim /etc/nginx/conf.d/rewrite.conf
server {
    listen 80;
    server_name rewrite.koten.com;
    root /code/rewrite;
    charset utf-8,gbk;

    location / {
        index index.html;
        if ($remote_addr != "10.0.0.2"){
            rewrite ^(.*)$ /网站维护.jpg break; #如
果来源IP不等于10.0.0.1,则跳转维护页面
        }
    }


}
<rewrite.conf" 16L, 321C written 
[root@Web01 rewrite]# systemctl restart nginx

Nginx内置参数

$args               #这个变量等于请求行中的参数。
$content_length     #请求头中的Content-length字段。
$content_type       #请求头中的Content-Type字段。
$document_root      #当前请求在root指令中指定的值。
$host               #请求主机头字段,否则为服务器名称。
$http_user_agent    #客户端agent信息
$http_cookie        #客户端cookie信息
$limit_rate         #这个变量可以限制连接速率。
$request_body_file  #客户端请求主体信息的临时文件名。
$request_method     #客户端请求的动作,通常为GET或POST。
$remote_addr        #客户端的IP地址。
$remote_port        #客户端的端口。
$remote_user        #已经经过Auth Basic Module验证的用户名。
$request_filename   #当前请求的文件路径,由root或alias指令与URI请求生成。
$query_string       #与$args相同。
$scheme             #HTTP方法(如http,https)。
$server_protocol    #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr        #服务器地址,在完成一次系统调用后可以确定这个值。
$server_name        #服务器名称。
$server_port        #请求到达服务器的端口号。
$request_uri        #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri                #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri       #与$uri相同。
$X-Forwarded-For:HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。标准格式如下:X-Forwarded-For: client1, proxy1, proxy2

我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/553772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序员不得不消化的基本概念:线程与协程,并行与并发

这是程序员的基本常识&#xff0c;这都搞不清楚&#xff0c;就不配为码农&#xff0c;就不配混CSDN。为人君者&#xff0c;招聘时可以以此为入门问题。 名词解释 在中文里&#xff0c;并发与并行很难望文生义&#xff0c;从字面上很难了解确切含义&#xff0c;貌似区别不大&am…

单机Redis、Redis持久化、Redis主从模式、Redis哨兵模式、Redis分片集群

一、单机Redis 数据库分类&#xff1a; 到目前为止&#xff0c;所有数据库分为两大类&#xff1a; RDBMS&#xff1a;关系型数据库&#xff0c;即传统数据库。 像MySQL、SQLServer、DB2、Sybase、SQLite、Oracle等等 以表的形式存储数据&#xff0c;表与表之间要维护数据的关系…

为什么投稿 SCI 被审稿人通过,又被编辑拒收?

有些作者在投稿过程中会遇到各种坑&#xff0c;不过有一种坑却最让作者痛心疾首&#xff0c;不知道大家有没有遇到过这样的状况&#xff1a; 审稿人建议接收&#xff0c;编辑却拒稿了&#xff1b; 或者审稿人建议拒稿&#xff0c;编辑却让自己改改再投&#xff1f; 有国外学者…

微服务: Seata AT springCloud整合分布式事务以配置方式(中篇)

目录 上篇: 安装seata 并启动成功的传送门 1. 前言: 2. springCloud 使用seata at 的步骤如下 第一步 查看springCloud版本 第二步添加maven依赖 第三步 添加yml配置 第四步: 配置数据源(druid) 第五步 修复一个警告 第六步: 启动后 看看日志是否成功 上篇: 安装seat…

边缘计算盒子功能介绍,为什么要用边缘计算盒子?

边缘计算盒子&#xff08;Edge Computing Box&#xff09;是一种用于边缘计算设备。边缘计算是一种分布式计算模型&#xff0c;它将计算和数据处理能力从传统的集中式云计算数据中心延伸到网络边缘的设备上&#xff0c;以便更快地响应实时数据处理需求和减少对云服务的依赖。 边…

HardenedVault 推出 Linux 安全加固版

导读HardenedVault 于 AWS 云平台上推出 Linux 安全加固版&#xff0c;该产品可以通过实施CIS和STIG基准来帮助您实现合规要求&#xff08;PCI-DSS和GDPR&#xff09;。 Shawn the R0ck 写道&#xff1a;HardenedVault自从 2022 年 7 月在 Amazon Web Services (AWS)推出了 Har…

Vscode运行Html的插件以及快速编写Html框架

然后我们点击创建文件&#xff0c;记住要以.html结尾 输入英文感叹号回车就行&#xff08;记住要英文&#xff09; 好了&#xff0c;希望小伙伴能快速入手VsCode&#xff0c;很好用的一款开源免费软件

基于Android的校园外卖系统app

一、项目介绍 Android客户端功能描述&#xff1a; 1&#xff1a;登录注册&#xff1a;用户可以通过自己的信息进行账号的注册 2&#xff1a;商家查看&#xff1a;查看发布的外卖商家信息 3&#xff1a;商家详情&#xff1a;用户点击某一个商家之后可以查看商家的地址和联系方…

AI人工智能在Python中构建回归器的原理、优缺点、应用场景和实现方法

回归器&#xff08;Regressor&#xff09;是一种常用的机器学习算法&#xff0c;可以用于预测数值型变量的值。在人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;领域中&#xff0c;回归器是一种高效的算法&#xff0c;可以用于许多应用领域&#…

6.4.4最短路径问题-Floyd算法

原来在邻接矩阵种v2使无法到达v1的 但如果我们把v0作为中转站 不断增加中转点&#xff08;1个中转点&#xff09; 这里的path的值是中转点 v1到v2之间是没有中转点的。 这只是以一个中转点&#xff0c;more 路走得越多&#xff0c;会越来越小 广度优先遍历算法是遍历顶点和边…

(二)ArcGIS空间数据的转换与处理——矢量数据变换

ArcGIS空间数据的转换与处理——矢量数据变换 目录 ArcGIS空间数据的转换与处理——矢量数据变换 1.空间校正2.边匹配 数据变换是指对数据进行诸如放大、缩小、翻转、移动、扭曲等几何位置、形状和方位的改变等操作。对 矢量数据的相应操作可以通过 ArcMap 中空间较正 (Spatia…

录制屏幕怎么设置?怎么录制高画质的视频?

在今天的数字时代&#xff0c;屏幕录制已经成为了日常工作中不可或缺的一部分。许多人需要在电脑上录制屏幕来制作教程视频、演示文稿或者是游戏录像。本文将介绍如何在电脑上录制屏幕并获得高画质的视频。 屏幕录制软件的选择 要在电脑上录制高画质的视频&#xff0c;首先需要…

【1】机器学习

目录 1 机器学习概述 1.1 定义 1.2 基本方法 1.3 基本概念 1.4 有监督学习 1.5 无监督学习 1.6 过度拟合问题 模型过于复杂(例如参数过多) 正则化 1.7 模型选择 交叉验证 K折交叉验证 2 机器学习常用工具 3 Scikit-learn 3.1 基本流程 3.2 Scikit-learn常用函数 3.…

csdn Markdown编辑器

文章目录 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个注脚注释也是…

云视如何实现流量转化

云视如何实现流量转化 大家好我是小鱼 小伙伴很好奇 云视除了直播带货 打赏&#xff0c;广告 还有哪些方式 可以实现流量转化 今天我和大家分享一下这个话题 接下来我们要讲讲 我们要用的工具 优惠券 适用于刺激消费回流&#xff0c;构建闭环消费圈。 课程赠送 趣味推广营销&am…

平台使用篇 | 批处理(bat)脚本使用教程(三)

导读 本讲针对RflySim平台的一些特点简要介绍了平台使用批处理技术的原因&#xff0c;并根据CopterSim中仿真功能区的参数设置阐述了批处理技术在平台中的具体运用。 平台使用篇 | 批处理(bat)脚本使用教程(三&#xff09; RflySim平台使用批处理技术的原因 ①调用多个软件Rf…

吲哚菁绿ICG-Amine/NH2荧光标记和成像1686147-55-6

ICG-Amine是一种荧光染料&#xff0c;ICG-Amine具有良好的荧光性能&#xff0c;可用于生物医学研究中的荧光标记和成像。ICG-Amine的物理性质如下&#xff1a;化学式&#xff1a;C47H56N4O4S&#xff0c;分子量为773.04&#xff0c;外观&#xff1a;深绿色粉末溶解性&#xff1…

代码随想录算法训练营第四十八天 | 树形dp

198.打家劫舍 文档讲解&#xff1a;代码随想录 (programmercarl.com) 状态&#xff1a;看了“决定dp[i]的因素才做出来"。 思路 当前房屋偷与不偷取决于 前一个房屋和前两个房屋是否被偷了。 所以这里就更感觉到&#xff0c;当前状态和前面状态会有一种依赖关系&#xf…

点云重建总结

几何处理和三维视觉 几何处理&#xff1a;是一种计算的方法研究世界中的物理对象&#xff0c;通过硬件扫描生成物理对象的三维模型然后做各种处理和分析。 三维视觉&#xff1a;传统的3D视觉是指从图像中恢复底层的三维结构。 1 几何重建 1.1几何重建的基本流程 扫描&…

宝塔PHP7.1版本37个扩展作用介绍

PATH_INFO&#xff1a;这个扩展可以让PHP获取到URL中的PATH_INFO信息&#xff0c;方便处理URL路由。 bt_safe&#xff1a;这个扩展可以帮助PHP防止一些常见的安全漏洞&#xff0c;比如SQL注入、XSS攻击等。 ionCube&#xff1a;这个扩展可以对PHP代码进行加密&#xff0c;保护…