当前位置: 首页 > news >正文

【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 匹配的规则和优先级&#xff1b;***重点 nginx常用的变量&#xff1b;要求掌握 rewrite 重定向&#xff1b;掌握/理解 location匹配&#xff1a;*** 正则表达式&#xff1a;匹配的是文件内容 常见的正则表达式&#xff1a…...

每日一题——滑动窗口的最大值

滑动窗口的最大值 题目链接 暴力解法 最容易想到的当然还是通过两层循环来暴力求解&#xff1a;一层循环用来移动窗口&#xff0c;一层循环用来在窗口内找到最大值。这种做法的时间复杂度为O(kN)&#xff0c;会超出时间限制&#xff0c;因此&#xff0c;我们要找到更加高效的…...

【使用go开发区块链】之获取链上数据(03)

上篇文章&#xff0c;我们完成了数据库的连接&#xff0c;本章节&#xff0c;我们将完成ethclient的配置以及初始化 1、ethclient配置 1.1、安装go-ethereum 在命令行终端输入下面代码安装&#xff1a; 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自己搭框架?

今天这篇文章呢&#xff0c;我会从以下几个方面来介绍&#xff1a; 1、首先介绍一下pytest框架 2、带大家安装Pytest框架 3、使用pytest框架时需要注意的点 4、pytest的运行方式 5、pytest框架中常用的插件 一、pytest框架介绍 pytest 是 python 的第三方单元测试框架&a…...

Objective-C获取变量类型的方法

在Objective-C中&#xff0c;要获取一个对象的类型&#xff0c;可以使用[object class]方法。这将返回一个Class对象&#xff0c;表示该对象的类型。 另外&#xff0c;typeid是C中的关键字&#xff0c;用于获取一个变量的类型信息。在Objective-C中&#xff0c;typeid并不适用于…...

相机可见区域,使用鼠标拖拽模型

知识点 向量射线检测坐标转换 思路 使用射线检测获取射线检测点与模型对象之间的偏移量 &#xff08;世界空间&#xff09;使用相机的坐标转换获取检测点与鼠标位置之间的偏移量 &#xff08;屏幕空间&#xff09;拖拽时&#xff0c;更新模型位置 代码示例 using UnityEng…...

Vue 2 与 Vue 3 的全面比较

Vue 2 与 Vue 3 的全面比较 1. 性能提升 Vue 3 的性能得到了显著提升。虚拟 DOM 已经重写&#xff0c;使补丁过程更快。 对比&#xff1a; Vue 3 使用了基于 Proxy 的新观察者机制&#xff0c;取代了 Vue 2 的基于 Object.defineProperty 的观察者。 Object.definePropert…...

Unity学习笔记--如何优雅简便地利用对象池生成游戏对象(进阶版)LRU + 对象池

前言 之前写过一篇关于对象池的文章&#xff0c;现在来看写的并不是很好&#xff0c;所以来考虑优化下。 现在来看一年前写的代码&#xff0c;越看越不能入目hhh Unity学习笔记–如何优雅简便地利用对象池生成游戏对象 前置知识 Unity学习笔记–使用 C# 开发一个 LRU 代码实…...

【Spring专题】Bean的声明周期流程图

前言 我向来不主张【通过源码】理解业务&#xff0c;因为每个人的能力有限&#xff0c;甚至可能会因为阅读错误导致出现理解上的偏差&#xff0c;所以我决定&#xff0c;还是先帮大家【开天眼】&#xff0c;先整体看看流程图&#xff0c;好知道&#xff0c;Spring在写源码的过…...

C++实现俄罗斯方块(源码+详解)

&#x1f442; Take me Hand Acoustic - Ccile Corbel - 单曲 - 网易云音乐 源码Debug工具 &#xff08;1&#xff09;cppreference.com &#xff08;主&#xff09; &#xff08;2&#xff09;必应 (bing.com) &#xff08;3&#xff09;GPT&#xff08;主&#xff09; &#…...

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 &#xff0c;20.04&#xff0c;18.04&#xff0c;16.04 等常见版本 ubuntu 虚拟机环境各准备一份。注意定期更新快照以防意外。虚拟机建议硬盘 256 G 以上&#xff0c;内存也尽量大一些。硬盘大小只是上界&#…...

Unity Poisson分布 【由ChatGPT生成】

Unity Poisson分布 【由ChatGPT生成】 前言项目Unity场景布置代码编写添加并设置脚本运行效果总结 前言 在Unity游戏开发中&#xff0c;数学和统计学的概念常常用于解决各种问题&#xff0c;从资源分配到游戏机制的设计。本文将探讨Poisson分布在Unity游戏开发中的实际应用和作…...

permission denied while trying to connect to the Docker daemon socket 错误

安装 docker 执行错误如下&#xff1a; $ 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子句&#xff0c;建立功能更强的检索语句。 5.1-组合WHERE子句 前面写的都是单一条件下的WHERE子句&#xff0c;SQL语句允许给出多个WHERE子句来组合检索&#xff0c;这些WHERE子句通过AND子句或者OR子句进行连接。 操作符&#xff08;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”的文件中&#xff0c;定义如下绘图方式&#xff0c;则在主页面(app.py)文件中&#xff0c;可通过如下方式调用&#xff1a; from WRITEPHOTO import WriteScatter,WriteFunnel,WriteBarData,WritePie,WriteLineBar 代码如下&#xff1a; "…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案

一、延迟敏感行业面临的DDoS攻击新挑战 2025年&#xff0c;金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征&#xff1a; AI驱动的自适应攻击&#xff1a;攻击流量模拟真实用户行为&#xff0c;差异率低至0.5%&#xff0c;传统规则引…...

leetcode_69.x的平方根

题目如下 &#xff1a; 看到题 &#xff0c;我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历&#xff0c;我们是整数的平方根&#xff0c;所以我们分两…...

Yii2项目自动向GitLab上报Bug

Yii2 项目自动上报Bug 原理 yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue 步骤 配置SiteController中的actions方法 public function actions(){return [error > [class > app\helpers\web\ErrorAction,],];}重写Error…...

Git 命令全流程总结

以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结&#xff0c;按操作场景分类整理&#xff1a; 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...

Python异步编程:深入理解协程的原理与实践指南

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 持续学习&#xff0c;不断…...

自定义线程池1.2

自定义线程池 1.2 1. 简介 上次我们实现了 1.1 版本&#xff0c;将线程池中的线程数量交给使用者决定&#xff0c;并且将线程的创建延迟到任务提交的时候&#xff0c;在本文中我们将对这个版本进行如下的优化&#xff1a; 在新建线程时交给线程一个任务。让线程在某种情况下…...