【Nginx】Nginx的重定向——location
location 匹配URI
location 匹配的规则和优先级;***重点
nginx常用的变量;要求掌握
rewrite 重定向;掌握/理解
location匹配:***
正则表达式:匹配的是文件内容
常见的正则表达式:
. 匹配任意单个字符,包括汉字
^ 起始位置
$ 结束位置
* 匹配前面的字符0次或者多次
+ 匹配前面的字符1次或者多次
? 匹配前面的字符1次或者0次
\ 转义符;\.==.;\d 匹配纯数字
[a-zA-Z0-9] 匹配所有大小写字符或者任意数字
[a] 匹配单个字符a
{n} 连续重复出现几次
{m,n} 最少出现m次,最多出现n次
() 分组
| 逻辑或
URI:统一资源标识符,是一种字符串标识,用于表示抽象的或者物理资源(文件、图片、视频)
location就是来匹配URI的
1.精确匹配:location= / {...}
2.正则匹配:location~ / {...}
3.通用匹配:location / {...}
匹配规则:
= 精确匹配;完全匹配,必须完全一致
^~ 匹配普通字符,前缀匹配
~ 区分大小写的匹配
~* 不区分大小写的匹配
~$ 结束位置
!~ 取反;区分大小写,取得逻辑非;
!~* 取反;不区分大小写
location的匹配原则:越精确,优先级越高
匹配的优先级:
精确匹配 > 正则匹配 > 通用匹配
location = > location ^~ > location ~* > location /test > location /
配置文件的修改:
vim /usr/local/nginx/conf/nginx.conf修改后:
nginx -t #查看语法是否有问题
systemctl restart nginx #重启nginx服务
生产中location的匹配规则
1.第一个必选规则
location = /
直接匹配根网站,通过域名访问网站首页是最多的;使用精确匹配,可以加快处理速度
2.第二个规则
location ^~ /static/ {}
处理静态文件的请求,目录匹配
3.
location ~* \.(gif|jpg|png|css) {...} #匹配图片用的
4.通用规则
location / {
proxy_pass 指定代理,反向代理,转发动态请求;将.php .jsp的请求发送到后端}location /test/ { #指定匹配}
rewrite 重写,重定向
作用:
rewrite使用nginx的全局变量或者是自己设置的变量,结合正则表达式和标志位实现URL的重写,以及重定向
rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用
例:
http://www.kgc.com/a/we/index.php?id=1&u=str #只对/a/we/index.php重写。
rewrite执行的顺序:
1.先执行server块当中的rewrite
2.执行location匹配
3.如果location当中还有rewrite,继续执行
不停rewrite,死循环,只能10次,然后报错,状态码:500
rewrite的语法:
rewrite <regex> <replacemnet> [flag]
rewrite 开始重定向
regex 正则匹配的规则
replacemnet 表示跳转后的内容,你要重定向的url
flag 标志位;表示rewrite支持的flag标记permanent 永久重定向;返回码:301
redirect 临时重定向;返回码:302
永久重定向,301;永久性的变更URL,搜索引擎会转移他的权重以及排名到新的URL
临时重定向,302;用于短期变更(例:网站维护,或者升级更新),搜索引擎不会转移权重和排名到新的URL
304 表示获取的是本地的缓存
flag标记说明
last 本条规则匹配完成后,继续向下匹配新的location URI规则。
break 本条规则匹配完成即终止,不再匹配后面的任何规则,且URI不会发生变化。
redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址。
permanent 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。
例:
permanent:
location / {rewrite /test/(.*) /ky30/$1 permanent;index index.html index.htm;}mkdir test
echo test > index.html
mkdir ky30
echo ky30 > index.html
返回301,永久重定向
break的作用
是重定向,但是不会改变URI,而且只会请求一次;跳出当前匹配,立即终止
last
本条负责匹配完成后,继续向下匹配,只要有last就继续匹配;配置的时候需要注意,防止进入死循环
死循环的报错:rewrite or internal redirection cycle while processing #写成死循环,一直在匹配location;循环10次后终止,返回码500.
基于域名的跳转
现在公司旧域名www.kgc.com有业务需求变更,需要使用新域名www.benet.com代替,但是旧域名不能废除,
需要跳转到新域名上,而且后面的参数保持不变。
vim /usr/local/nginx/conf/nginx.conf
server {listen 80;server_name www.kgc.com; #域名修改 #charset utf-8;#access_log /var/log/nginx/kgc.com-access.log; #日志修改location / {#添加域名重定向if ($host = 'www.kgc.com'){ #$host为rewrite全局变量,代表请求主机头字段或主机名rewrite ^/(.*)$ http://www.benet.com/$1 permanent; #在重定向时,$1表示请求的URL}root html;index index.html index.htm;}
}echo "192.168.220.10 www.kgc.com www.benet.com" >> /etc/hosts
systemctl restart nginx
permanent: 永久性重定向,请求日志中的状态码为301。
基于IP地址的跳转:页面维护、升级
今天公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,
只有公司 IP :192.168.220.10访问正常。
vim /usr/local/nginx/conf/nginx.conf
server {listen 80;server_name www.kgc.com; #域名修改 charset utf-8;access_log /var/log/nginx/kgc.com-access.log; #日志修改#设置是否合法的IP标记set $rewrite true; #设置变量$rewrite,变量值为boole值true#判断是否为合法IPif ($remote_addr = "192.168.220.10"){ #当客户端IP为192.168.220.10时,将变量值设为false,不进行重写set $rewrite false;}#除了合法IP,其它都是非法IP,进行重写跳转维护页面if ($rewrite = true){ #当变量值为true时,进行重写rewrite (.+) /error.html; #重写在访问IP后边插入/error.html,例如192.168.220.22/error.html}location = /error.html {root html; #网页返回html/error.html的内容}location / {root html;index index.html index.htm;}
}systemctl restart nginx#只有 IP 为 192.168.220.10 能正常访问,其它地址都是维护页面systemctl restart nginx.service
基于目录下所有 php 结尾的文件跳转
vim /usr/local/nginx/conf/nginx.conf
server {listen 80;server_name www.test.com; #域名修改 charset utf-8;access_log /var/log/nginx/www.test.com-access.log;location ~* /upload/.*\.php$ {rewrite (.+) http://www.test.com permanent;}location / {root html;index index.html index.htm;}
}
systemctl restart nginx
访问http://www.test.com/upload/123.php,直接跳转到www.test.com
Nginx的内置变量:
$uri
$remote_addr 客户端的IP地址
$remote_port 客户端的端口号
$server_addr 服务器的IP地址
$server_port 服务器的端口号。表示如果没有在其他地方显示设置,content-type的字段,默认响应为text/plan;纯文本格式
text/html 默认的响应类型,也就是我们说的页面
相关文章:
【Nginx】Nginx的重定向——location
location 匹配URI location 匹配的规则和优先级;***重点 nginx常用的变量;要求掌握 rewrite 重定向;掌握/理解 location匹配:*** 正则表达式:匹配的是文件内容 常见的正则表达式:…...
每日一题——滑动窗口的最大值
滑动窗口的最大值 题目链接 暴力解法 最容易想到的当然还是通过两层循环来暴力求解:一层循环用来移动窗口,一层循环用来在窗口内找到最大值。这种做法的时间复杂度为O(kN),会超出时间限制,因此,我们要找到更加高效的…...
【使用go开发区块链】之获取链上数据(03)
上篇文章,我们完成了数据库的连接,本章节,我们将完成ethclient的配置以及初始化 1、ethclient配置 1.1、安装go-ethereum 在命令行终端输入下面代码安装: go get github.com/ethereum/go-ethereum1.2、Ethclient配置 1.2.1、新…...
js 动态设置transformOrigin
transformOrigin属性用于指定元素变换的原点。 // 获取要设置的元素 const element document.getElementById(your-element-id);// 设置transformOrigin属性 element.style.transformOrigin 50% 50%; // 以元素中心为原点// 或者使用变量来设置 const x 0; // x坐标 const …...
docker使用tab无法自动补全命令
本文参考链接 一、安装bash-complete 在线安装 yum install -y bash-completion二、刷新文件 source /usr/share/bash-completion/completions/docker source /usr/share/bash-completion/bash_completion...
既然jmeter也能做接口自动化,为什么还需要pytest自己搭框架?
今天这篇文章呢,我会从以下几个方面来介绍: 1、首先介绍一下pytest框架 2、带大家安装Pytest框架 3、使用pytest框架时需要注意的点 4、pytest的运行方式 5、pytest框架中常用的插件 一、pytest框架介绍 pytest 是 python 的第三方单元测试框架&a…...
Objective-C获取变量类型的方法
在Objective-C中,要获取一个对象的类型,可以使用[object class]方法。这将返回一个Class对象,表示该对象的类型。 另外,typeid是C中的关键字,用于获取一个变量的类型信息。在Objective-C中,typeid并不适用于…...
相机可见区域,使用鼠标拖拽模型
知识点 向量射线检测坐标转换 思路 使用射线检测获取射线检测点与模型对象之间的偏移量 (世界空间)使用相机的坐标转换获取检测点与鼠标位置之间的偏移量 (屏幕空间)拖拽时,更新模型位置 代码示例 using UnityEng…...
Vue 2 与 Vue 3 的全面比较
Vue 2 与 Vue 3 的全面比较 1. 性能提升 Vue 3 的性能得到了显著提升。虚拟 DOM 已经重写,使补丁过程更快。 对比: Vue 3 使用了基于 Proxy 的新观察者机制,取代了 Vue 2 的基于 Object.defineProperty 的观察者。 Object.definePropert…...
Unity学习笔记--如何优雅简便地利用对象池生成游戏对象(进阶版)LRU + 对象池
前言 之前写过一篇关于对象池的文章,现在来看写的并不是很好,所以来考虑优化下。 现在来看一年前写的代码,越看越不能入目hhh Unity学习笔记–如何优雅简便地利用对象池生成游戏对象 前置知识 Unity学习笔记–使用 C# 开发一个 LRU 代码实…...
【Spring专题】Bean的声明周期流程图
前言 我向来不主张【通过源码】理解业务,因为每个人的能力有限,甚至可能会因为阅读错误导致出现理解上的偏差,所以我决定,还是先帮大家【开天眼】,先整体看看流程图,好知道,Spring在写源码的过…...
C++实现俄罗斯方块(源码+详解)
👂 Take me Hand Acoustic - Ccile Corbel - 单曲 - 网易云音乐 源码Debug工具 (1)cppreference.com (主) (2)必应 (bing.com) (3)GPT(主) &#…...
01:STM32点灯大师和蜂鸣器
目录 一:点亮1个LED 1:连接图 2:函数介绍 3:点灯代码 二:LED闪烁 1:函数介绍 2:闪烁代码 三:LED流水灯 1:连接图 2:函数介绍 3:流水灯代码 四:蜂鸣器 1:连接图 2:蜂鸣器代码 一:点亮1个LED 1:连接图 因为IO口与LED负极相连所以IO口输出低电频,点亮LED (采用的是低…...
linux pwn 基础知识
环境搭建 虚拟机安装 镜像下载网站为了避免环境问题建议 22.04 ,20.04,18.04,16.04 等常见版本 ubuntu 虚拟机环境各准备一份。注意定期更新快照以防意外。虚拟机建议硬盘 256 G 以上,内存也尽量大一些。硬盘大小只是上界&#…...
Unity Poisson分布 【由ChatGPT生成】
Unity Poisson分布 【由ChatGPT生成】 前言项目Unity场景布置代码编写添加并设置脚本运行效果总结 前言 在Unity游戏开发中,数学和统计学的概念常常用于解决各种问题,从资源分配到游戏机制的设计。本文将探讨Poisson分布在Unity游戏开发中的实际应用和作…...
permission denied while trying to connect to the Docker daemon socket 错误
安装 docker 执行错误如下: $ docker pspermission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json”: dial unix /var/run/docker.sock: connect:…...
pytorch nn.ModuleList和nn.Sequential的用法笔记
有部分内容转自: pytorch小记:nn.ModuleList和nn.Sequential的用法以及区别_慕思侣的博客-CSDN博客 但是有部分内容做了修改调整, 在构建网络的时候,pytorch有一些基础概念很重要,比如nn.Module,nn.ModuleList,nn.Sequential,这些类我们称为为容器(containers),可…...
SQL | 高级数据过滤
5-高级数据过滤 通过组合WHERE子句,建立功能更强的检索语句。 5.1-组合WHERE子句 前面写的都是单一条件下的WHERE子句,SQL语句允许给出多个WHERE子句来组合检索,这些WHERE子句通过AND子句或者OR子句进行连接。 操作符(operato…...
ARM架构银河麒麟docker,源码编译安装GDAL
docker中安装依赖 sudo apt-get update sudo apt-get install build-essential autoconf automake libtool sudo apt-get install libproj-dev libgeos-dev libjson-c-dev libpng-dev libjpeg-dev sudo apt-get install python3-dev sudo apt-get install python3.11-dev去官网…...
(3)原神角色数据分析-3
绘图类 在名为“WRITEPHOT.py”的文件中,定义如下绘图方式,则在主页面(app.py)文件中,可通过如下方式调用: from WRITEPHOTO import WriteScatter,WriteFunnel,WriteBarData,WritePie,WriteLineBar 代码如下: "…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
Spring AOP代理对象生成原理
代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...
前端工具库lodash与lodash-es区别详解
lodash 和 lodash-es 是同一工具库的两个不同版本,核心功能完全一致,主要区别在于模块化格式和优化方式,适合不同的开发环境。以下是详细对比: 1. 模块化格式 lodash 使用 CommonJS 模块格式(require/module.exports&a…...
spring boot使用HttpServletResponse实现sse后端流式输出消息
1.以前只是看过SSE的相关文章,没有具体实践,这次接入AI大模型使用到了流式输出,涉及到给前端流式返回,所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...
无需布线的革命:电力载波技术赋能楼宇自控系统-亚川科技
无需布线的革命:电力载波技术赋能楼宇自控系统 在楼宇自动化领域,传统控制系统依赖复杂的专用通信线路,不仅施工成本高昂,后期维护和扩展也极为不便。电力载波技术(PLC)的突破性应用,彻底改变了…...
宠物车载安全座椅市场报告:解读行业趋势与投资前景
一、什么是宠物车载安全座椅? 宠物车载安全座椅是一种专为宠物设计的车内固定装置,旨在保障宠物在乘车过程中的安全性与舒适性。它通常由高强度材料制成,具备良好的缓冲性能,并可通过安全带或ISOFIX接口固定于车内。 近年来&…...
