【运维知识进阶篇】集群架构-Rewrite重定向
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年运维经验,持续分享运维干货,感谢大家的阅读和关注!
相关文章:
【运维知识进阶篇】集群架构-Rewrite重定向
Rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程。 分以下几种场景使用 1、地址跳转,用户访问一个URL,将其定向到另一个URL 2、协议跳转,用户通过http协议请求网站时,…...
JavaScript如何使用while循环
JavaScript 中的 while 循环是一种常用的循环结构,用于在满足一定条件时重复执行一段代码块。while 循环会先检查条件是否为真,如果为真,则执行循环体中的代码,然后再次检查条件。当条件变为假时,循环会结束。 while(…...
『MySQL 实战 45 讲』16 - “order by” 是怎么工作的
“order by” 是怎么工作的 首先创建一个表 CREATE TABLE t ( id int(11) NOT NULL, city varchar(16) NOT NULL, name varchar(16) NOT NULL, age int(11) NOT NULL, addr varchar(128) DEFAULT NULL, PRIMARY KEY (id), KEY city (city) ) ENGINEInnoDB;全字段排序 在 cit…...
怎么给移动硬盘查错?移动硬盘查错能恢复数据吗
移动硬盘在长期使用或使用不当的情况下,可能会出现硬盘文件损坏或者出现坏道等问题,影响数据安全和文件操作。这时候,移动硬盘查错工具就派上用场了。它可以帮助用户发现移动硬盘中的问题,并且还可以对移动硬盘进行修复。 但是&a…...
javaIO流之缓冲流
目录 简介1、字节缓冲流1.1构造方法1.2缓冲流的高效1.3为什么字节缓冲流会这么快?1.4byte & 0xFF 2、字符缓冲流2.1构造方法2.2字符缓冲流特有方法 3、练习 简介 Java 的缓冲流是对字节流和字符流的一种封装,通过在内存中开辟缓冲区来提高 I/O 操作…...
定义制造业操作(定义 MES/MOM 系统)
制造业操作包含众多工厂级活动,涉及设备(定义、使用、时间表和维护)、材料(识别、属性、位置和状态)、人员(资格、可用性和时间表),以及这些资源与包含其信息碎片的众多系统之间的互…...
人工智能专栏第二讲——人工智能的基础技术
目录 一、机器学习 二、深度学习 三、自然语言处理 四、计算机视觉 五、总结 在第一讲中,我们介绍了人工智能的概念和发展趋势&#...
注意!ChatGPT的Plus账号也会被封禁
文 / 高扬(微信公众号:量子论) 最近经常看到有人丢个截图,然后悲伤地说,ChatGPT账号被封了。 这不是账号被封,而是所用的代理节点被OpenAI封了,换个节点即可。 这个截图才是账号真正被封的提示&…...
理解:Public Key Cryptography的应用
Applications Encryption with public key, decryption with private key Confidentiality or secrecy Encryption with private key, decryption with public key Integrity/authentication 一些概念特征的明确: public key:所有人都知道(公…...
深度学习中的图像分类介绍
文章目录 深度学习中的图像分类介绍深度学习中的图像分类技术卷积神经网络 (Convolutional Neural Network, CNN)深度残差网络 (Deep Residual Network, ResNet)卷积神经网络的变种 图像分类的应用计算机视觉目标检测人脸识别自动驾驶图像搜索视频监控 医疗成像疾病分类病灶识别…...
自然语言处理基础
以下所有内容来自《自然语言处理 基于预训练模型的方法》 1. 文本的表示 利用计算机对自然语言进行处理,首先要解决语言在计算机内部的存储和计算问题。使用字符串表示计算文本的语义信息的时候,往往使用基于规则的方法。如:判断一个句子编…...
低代码与其拓荒,不如颠覆开发行业
目录 一、前言 二、低代码是一个值得信赖的“黑盒子” 粗略总结,开发者对低代码平台所见即所得设计器有两种反应: 三、人人都爱黑盒子 四、用“低代码平台”来开发是什么样的感受? 五、结论 一、前言 在科幻电影中,我们看到…...
【数据结构】散列表(哈希表)
文章目录 前言一、什么是散列表二、什么是哈希函数三、下面简单介绍几种哈希函数四、冲突处理散列冲突的方法开放定址法再散列函数法公共溢出区法链地址法 五、代码实现1.哈希函数2.链表和哈希表的创建3.哈希表初始化3.从哈希表中根据key查找元素4.哈希表插入元素5.元素删除6.哈…...
Flutter 笔记 | Flutter 核心原理(一)架构和生命周期
Flutter 架构 简单来讲,Flutter 从上到下可以分为三层:框架层、引擎层和嵌入层,下面我们分别介绍: 1. 框架层 Flutter Framework,即框架层。这是一个纯 Dart实现的 SDK,它实现了一套基础库,自…...
【Linux进阶之路】基本指令(下)
文章目录 一. 日志 date指令——查看日期基本语法1基本语法2cal指令——查看日历常见选项 二 .find——查找文件常用选项-name显示所有文件显示指定类型的文件 三.grep——行文本过滤工具语法常见的用法补充知识——APP与服务器的联系 四.打包压缩与解压解包zip与unzipzipunzip…...
Vue--》Vue 3 路由进阶——从基础到高级的完整指南
目录 Vue3中路由讲解与使用 路由的安装与使用 路由模式的使用 编程式路由导航 路由传参 嵌套路由 命名视图 重定向与别名 Vue3中路由讲解与使用 Vue 路由是 Vue.js 框架提供的一种机制,它用于管理网页上内容的导航。Vue 路由可以让我们在不刷新页面的情况下…...
【华为OD机试真题】【python】 网上商城优惠活动(一)【2022 Q4 | 100分】
华为OD机试- 题目列表 2023Q1 点这里!! 2023华为OD机试-刷题指南 点这里!! 题目描述 某网上商场举办优惠活动,发布了满减、打折、无门槛3种 优惠券,分别为: 1:每满100元优惠10元,无使用数限制,如100~199元可以使用1张减10元,200-299可使用2张减20元,以此类推; 2:…...
【业务数据分析】—— 用户留存分析(以挖掘Aha时刻为例)
目录 一、用户留存是什么 二、为什么要考虑用户留存 1、为什么要考虑用户留存? 2、影响用户留存的可能因素 3、用户留存的3个阶段 三、怎么进行用户留存分析(挖掘Aha时刻) 1、Aha时刻 2、Aha时刻的作用 3、挖掘Aha时刻 一、用户留存是什么 在互联网行业中&…...
极客的git常用命令手册
极客的git常用命令手册 1.1 权限配置篇1.1.1 创建ssh key1.1.2 本地存在多个密钥时,如何根据目标平台自动选择用于认证的密钥? 1.2 基础信息配置篇1.2.1 配置用户名1.2.2 配置用户邮箱1.2.3 设置文件名大小写区分1.2.4 设置命令行显示颜色1.2.5 检查git全…...
spring-data 一统江湖,玩转多种数据源
1、起因 因为要在项目中同时访问redis,mongo和mysql三种数据库,而且因为偏向spring-data,所以都使用了spring-data 在使用的过程中如果不做配置发现会有冲突,这篇文章也是解决这个问题,避免以后遇到同样的问题不知所…...
OpenClaw技能市场挖掘:百川2-13B-4bits量化版适配插件精选
OpenClaw技能市场挖掘:百川2-13B-4bits量化版适配插件精选 1. 为什么需要专门适配百川模型的技能? 去年冬天第一次尝试用OpenClaw对接百川2-13B模型时,我遇到了一个典型问题:虽然模型本身运行良好,但很多现成的技能模…...
Android系统异常问题处理全攻略:从死机重启到日志分析,手把手教你构建排查体系
文章目录1 前言:为什么你的手机总是卡死、重启?2 系统异常的“五层分诊”3 核心原理:系统是如何判定“你该死”的?3.1 ANR的判定机制3.2 Watchdog机制:守护SystemServer4 日志的“三板斧”:每一个死机问题都…...
不换设备、不重写程序:耐达讯自动化网关如何实现CC-Link IE转Modbus TCP的高效互通?
在工业4.0与智能制造加速落地的当下,工厂自动化系统的集成复杂度日益攀升。一个普遍存在的工程痛点在于:控制层往往采用以三菱电机为代表的CC-Link IE高速工业以太网,追求微秒级的同步与海量数据吞吐;而现场设备层却依然大量存留着…...
炸裂!昔日神话Sora惨遭抛弃,AI泡沫真的要碎了吗?
当初奥特曼(Sam Altman)在 2024 年底放出 Sora 的时候,全网简直像开了锅一样。 那时候,谁要是敢说半个“不”字,分分钟被那群科技狂热分子喷成筛子。 大家看着那堆其实并不怎么真实、甚至透着股子“恐怖谷”味道的 20 …...
基于File-Based App开发MVP项目钨
Issue 概述 先来看看提交这个 Issue 的作者是为什么想到这个点子的,以及他初步的核心设计概念。?? 本 PR 实现了 Apache Gravitino 与 SeaTunnel 的集成,将其作为非关系型连接器的外部元数据服务。通过 Gravitino 的 REST API 自动获取表结构和元数据&…...
ACAN2517 Arduino CAN驱动库:经典CAN 2.0B工业通信实战指南
1. 项目概述 ACAN2517 是一款专为 Microchip MCP2517FD、MCP2518FD 和 MCP251863 系列 CAN 控制器设计的 Arduino 兼容驱动库,工作于经典 CAN 2.0B 协议模式。该库并非面向 CAN FD(Flexible Data-Rate)高速扩展协议,而是聚焦于工业…...
如何快速构建诗歌API:PoetryDB开源项目完整指南 [特殊字符]
如何快速构建诗歌API:PoetryDB开源项目完整指南 🚀 【免费下载链接】poetrydb The Internets first Poetry API 项目地址: https://gitcode.com/gh_mirrors/po/poetrydb PoetryDB是互联网上第一个诗歌API项目,为开发者和诗歌爱好者提供…...
AI Agent Harness Engineering 未来技术突破点:自主进化与跨域协作的研究方向
AI Agent Harness Engineering的未来:自主进化与跨域协作如何重塑智能世界 关键词:AI Agent、Harness Engineering、自主进化、跨域协作、多智能体系统、自适应学习、通用人工智能 摘要:随着大语言模型(LLM)和强化学习(RL)的快速发展,AI Agent已从早期的“规则驱动工具…...
游戏音频解密全流程:acbDecrypter高效处理指南
游戏音频解密全流程:acbDecrypter高效处理指南 【免费下载链接】acbDecrypter 项目地址: https://gitcode.com/gh_mirrors/ac/acbDecrypter 在游戏开发与音频 mod 创作中,如何突破加密音频格式的限制,将 ACB、HCA、ADX 等专用格式转换…...
把 Flask 搬进 ESP,高中生自研嵌入式 Web 框架 MicroFlask !唤
如果有多个供应商,你也可以使用 [[CC-Switch]] 来可视化管理这些API key,以及claude code 的skills。 # 多平台安装指令 curl -fsSL https://claude.ai/install.sh | bash ## Claude Code 配置 GLM Coding Plan curl -O "https://cdn.bigmodel.cn/i…...


