Nginx location匹配优先级 与 Rewrite

news2024/12/28 3:48:19

目录

  • 前言
    • location
    • location 常用的匹配规则
    • location 优先级
    • 实例演示
  • rewrite前言
    • rewrite跳转实现
    • rewrite 执行顺序
    • 语法格式
    • rewrite全局变量
    • 实例演示

前言

  • 从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一个域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理 ,还可以 proxy_pass 到其它机器。
  • rewrite 对访问的域名或者域名内的URL路径地址重写
  • location 对访问的路径做访问控制或者代理转发

location

  • location 大致可以分为三类
    • 精准匹配:location = / {…}
    • 正则匹配:location ~ / {…}
    • 一般匹配:location / {…}

location 常用的匹配规则

  • = :进行普通字符精确匹配,也就是完全匹配。
  • ^~ :表示普通字符匹配。使用前缀匹配。如果 匹配成功,则不再匹配其它 正则匹配location。
  • ~ :区分大小写的匹配。
  • ~* :不区分大小写的匹配。
  • !~ :区分大小写的匹配取非。
  • !~* :不区分大小写的匹配取非。

location 优先级

  • 首先精确匹配 : =
  • 其次前缀匹配 :^~
  • 其次是按文件中顺序的正则匹配:~或~*
  • 然后匹配不带任何修饰符的一般前缀匹配
  • 最后是交给 / 通用匹配

实例演示

/usr/local/nginx/html 目录
在这里插入图片描述

配置文件:vim /usr/local/nginx/conf/nginx.conf
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • location 匹配

    • 首先看 优先级:精确= > 前缀^~ > 正则~,~* > 一般 > 通用 /
  • 优先级总结:

    • (location = 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分前缀路径) > (location /)
  • 在没有精准匹配的情况下,先看前缀匹配的长度,然后根据最长的前缀匹配的优先级去确定是否再去看其它正则匹配location

  • 如果最长的前缀匹配带有 ^~ 则不再看其它正则匹配location,如果最长的前缀匹配是没有修饰符的一般匹配则会再看其它正则匹配location

    • 前缀匹配看长度,最长的优先匹配
    • 正则匹配看上下顺序,由上往下依次匹配,当有匹配成功时候,停止匹配,按当前匹配规则处理请求
    • 只有在精准、前缀、正则、一般 都没有匹配到的时候才会看通用匹配

rewrite前言

  • rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。

  • 比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。

  • rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用,

  • 例如 http://www.kgc.com/abc/bbs/index.php?a=1&b=2 只对/abc/bbs/index.php重写

rewrite跳转实现

  • Nginx:通过ngx_http_rewrite_module 模块支持URL重写、支持if条件判断,但不支持else
  • 跳转:从一个 location跳转到另一个location,循- 环最多可以执行10次,超过后nginx将返回500错误
  • PCRE支持:perl兼容正则表达式的语法规则匹配
  • 重写模块 set 指令:创建新的变量并设其值

rewrite 执行顺序

(1) 执行 server 块里面的 rewrite 指令。
(2) 执行 location 匹配。
(3) 执行选定的 location 中的 rewrite 指令。

语法格式

  • rewrite <regex> <replacement> [flag];
    • regex :表示正则匹配规则。
    • replacement :表示跳转后的内容。
      • 默认情况下只会y对域名后面从根目录开始到?前面的url进行重写
      • 全路径重写得加上协议和域名 http://域名/url路径
    • flag :表示 rewrite 支持的 flag 标记。
    • lag标记说明
      • last :本条规则匹配完成后,不终止重写后的url匹配,一般用在 server 和 if 中。
      • break :本条规则匹配完成即终止,终止重写后的url匹配,一般使用在 location 中。
      • redirect :返回302临时重定向,浏览器地址会显示跳转后的URL地址。
      • permanent :返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。
  • redirect和permanent 的意思就是
    • 旧域名+URL,通过rewrite转换成新的域名+URL,在通过浏览器访问,去匹配location 跳转页面,并浏览器地址栏也会显示重写后的地址
    • 默认情况是旧域名+URL,通过rewrite转换成新的域名+URL,去匹配location 跳转页面,不会在通过浏览器去在访问一遍,地址栏也是旧的域名地址。
      在这里插入图片描述

rewrite全局变量

在这里插入图片描述

实例演示

1.基于域名的跳转
现在公司旧域名www.kgc.com有业务需求变更,需要使用新域名www.benet.com代替,但是旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变。

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.ccc.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.ccc.com-access.log;		#日志修改
	location / {
	#添加域名重定向
        if ($host = 'www.ccc.com'){						#$host为rewrite全局变量,代表请求主机头字段或主机名
			rewrite ^/(.*)$ http://www.bbb.com/$1 permanent;	#$1为正则匹配的内容,即“域名/”之后的字符串
        }
        root   html;
        index  index.html index.htm;
    }
}
echo "192.168.60.5 www.ccc.com www.bbb.com" >> /etc/hosts
systemctl restart nginx
浏览器输入模拟访问 http://www.ccc.com/(虽然这个请求内容是不存在的)
会跳转到www.bbb.com/,查看元素可以看到返回301,实现了永久重定向跳转,而且域名后的参数也正常跳转。

在这里插入图片描述
2.基于客户端 IP 访问跳转
今天公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,只有公司 IP :192.168.80.10访问正常。

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.ccc.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.ccc.com-access.log;		#日志修改

	#设置是否合法的IP标记
    set $rewrite true;							#设置变量$rewrite,变量值为boole值true
    #判断是否为合法IP
	if ($remote_addr = "192.168.60.5"){		#当客户端IP为192.168.60.5时,将变量值设为false,不进行重写
        set $rewrite false;
    }
	#除了合法IP,其它都是非法IP,进行重写跳转维护页面
    if ($rewrite = true){						#当变量值为true时,进行重写
        rewrite (.+) /weihu.html;				#将域名后边的路径重写成/weihu.html后转发,例如www.kgc.com/weihu.html
    }
    location = /weihu.html {
        root /var/www/html;						#网页返回/var/www/html/weihu.html的内容
    }
	
	location / {
        root   html;
        index  index.html index.htm;
    }
}
mkdir -p /var/www/html/
echo "<h1>We are maintaining now!</h1>" > /var/www/html/weihu.html
systemctl restart nginx
只有 IP 为 192.168.60.5 能正常访问,其它地址都是维护页面

在这里插入图片描述

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

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

相关文章

抛弃传统网络?SDN协议、标准、接口对比分析

随着网络规模的不断扩大和复杂性的增加&#xff0c;传统的网络架构已经难以满足日益增长的网络需求。SDN&#xff08;Software Defined Networking&#xff09;技术的出现&#xff0c;为网络的管理和控制带来了革命性的变化。SDN的核心思想是将网络的控制和管理从传统的分散式硬…

STL-string-2

Iterators Capacity resize void resize (size_t n);void resize (size_t n, char c); Resize string 将字符串的大小调整为n个字符的长度。 如果n小于当前字符串长度&#xff0c;则当前值将缩短为其第一个n字符&#xff0c;删除第n个字符之后的字符。 如果n大于当前字符串长…

Python接口自动化之yaml配置文件

Python自动化测试&#xff1a;7天练完这60个实战项目&#xff0c;年薪过35w。 软件测试技术分享总结 在自动化过程中&#xff0c;需要使用配置文件储存数据&#xff0c;比如数据库信息、账号信息、域名等。 其中&#xff0c;yaml文件是一种配置文件类型&#xff0c;相比较in…

职场已是00后的天下了,起薪20k,想都不敢想

2023年很卷吗&#xff1f;不&#xff0c;只能说你还得学&#xff01; 都说00后已经躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷&#xff01; 这不&#xff0c;前段时间我们公司新招来了一个00后小伙&#xff0c;工作都没2年&#xff0c;跳槽到我们公司就起薪20K&…

基于linux安装部署clickhouse+基本操作

基于linux安装部署clickhouse基本操作 1.clickhouse简介 ClickHouse 是俄罗斯的Yandex于2016年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用C语言编写&#xff0c;主要用于在线分析处理查询&#xff08;OLAP&#xff09;&#xff0c;能够使用SQL查询实…

一个年薪30w软件测试员的职业规划,献给还在迷茫中的朋友

如果你做了几年的功能测试&#xff0c;如今很迷茫&#xff0c;不知道该往哪里走&#xff0c;那么请看过来&#xff01; 一&#xff1a;技术方向 1. 测试开发工程师&#xff1a; 支撑测试部门&#xff0c;一般来说主要负责设计&编写测试部门所需的测试工具&#xff0c;提…

华为OD机试真题 Java 实现【寻找峰值】【牛客练习题】

一、题目描述 给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。 1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于; 2.假设 nums[-1] = nums[n] = -\infty−∞; 3.对于所有有效的…

被迫在小公司熬了2年,现在我终于进了腾讯测试岗...

其实两年前校招的时候就往腾讯投了一次简历&#xff0c;结果很明显凉了&#xff0c;随后这个理想就被暂时放下了&#xff0c;但是这个种子一直埋在心里&#xff0c;想着总有一天会再次挑战的。 其实这两年除了工作以外&#xff0c;其余时间基本上都在学习&#xff0c;打磨自己…

Ubuntu系统镜像下载,国内镜像站大全(山大/清华/阿里/浙大/中科大...)

装Ubuntu&#xff0c;是很多理工科同学入门的第一个挑战&#xff0c;首先我们就需要找到一个能用的iso镜像&#xff0c;根据你的网络环境的不同&#xff0c;不同的站点下载速度会不一样&#xff0c;下面列举一下几个比较好用的&#xff0c;都是来自Ubuntu官方推荐国内镜像站链接…

一起来学习Vue2吧

虽然Vue3已经出来好一阵子了&#xff0c;但就目前而言&#xff0c;Vue2在市场上还是会占一大部分的&#xff0c;因为一些老项目是用Vue2写的&#xff0c;后期维护也是需要Vue2&#xff0c;而且学会Vue2&#xff0c;Vue3你也会的差不多了&#xff0c;到后面稍微看一下理解一下Vu…

[5]PCB设计实验|卷积神经网络基础|零基础入门深度学习(4) 卷积神经网络|14:00~14:55

资料来源&#xff1a;零基础入门深度学习(4) - 卷积神经网络 - 作业部落 Cmd Markdown 编辑阅读器 目录 1. Relu激活函数 2. 全连接网络VS卷积网络 3. 卷积神经网络 3.1 网络架构 3.2 三维的层结构 4. 卷积神经网络输出值的计算 5. Pooling层输出值的计算 6. 全连…

【自动化测试基础】Appium自动化环境搭建保姆级教程

APP自动化测试运行环境比较复杂&#xff0c;稍微不注意安装就会失败。我见过不少朋友&#xff0c;装了1个星期&#xff0c;Appium 的运行环境还没有搭好的。 搭建环境本身不是一个有难度的工作&#xff0c;但是 Appium 安装过程中确实存在不少隐藏的比较深的坑&#xff0c;如果…

开源赋能 普惠未来|腾讯寄语2023开放原子全球开源峰会

腾讯长期秉承科技向善的宗旨&#xff0c;通过通信和社交服务连接全球逾 10 亿人&#xff0c;提供云计算、广告、金融科技等一系列企业服务。 作为开放原子开源基金会&#xff08;以下简称“基金会”&#xff09;发起人之一&#xff0c;腾讯坚定拥抱开源&#xff0c;全力支持开…

【最新计算机毕业设计 本科 大专 游戏方向 源码】

2022年 - 2023年 最新计算机毕业设计 本科 大专 游戏方向 源码 下载前必看&#xff1a;纯小白教程&#xff0c;unity两种格式资源的使用方法&#xff0c;1打开现有项目、2导入package 大专毕设源码&#xff1a;数媒专业、计算机专业、电子专业通用50多款大专毕设小游戏【源码】…

转行程序员,自学可以吗?35岁会被裁员吗?

大家好&#xff0c;欢迎来到停止重构的频道。 本期我们聊一些技术以外的分享。 一个非科班出身的人转行程序员难吗&#xff1f; 自学可以吗&#xff1f; 我也不是计算机相关专业毕业的&#xff0c;以下聊的都是我的一些真实经历&#xff0c;希望能给想要进入软件行业的非科班…

Centos7安装下载的mysql8+

1.官网下载 MySQL 安装包 1.1选择版本及下载 1、官网地址 https://dev.mysql.com/downloads/mysql/ 2、选择下载 MySQL 的 Linux 系统版本 Select Operating System: 选择 Red Hat &#xff0c;CentOS 是基于红帽的&#xff0c;Select OS Version: 选择 linux 7 3、选择要下…

51单片机银行自助排队叫号系统VIP热敏打印功能DY-SV17F语音播报

实践制作DIY- GC0138-银行自助排队叫号系统VIP 基于51单片机设计---银行自助排队叫号系统VIP 二、功能介绍&#xff1a; STC89C52最小系统板0.96寸OLED显示器DY-SV17F语音串口语音播报模块DS1302北京时间热敏打印机1个业务选择&#xff08;取钱或者存钱&#xff09;1个普通取号…

chatgpt赋能python:Python后门:你需要知道的一切

Python后门&#xff1a;你需要知道的一切 Python是一种广泛使用的编程语言&#xff0c;由于其易学易用、灵活且高效的特点&#xff0c;越来越多的企业和组织采用Python构建应用程序和Web应用。然而&#xff0c;正因为Python的方便性&#xff0c;也使其成为攻击者植入后门程序的…

机器学习 | 聚类问题

一、K均值聚类 这里我们用鸢尾花数据及进行聚类分析&#xff0c;这种含有标签数据的数据集&#xff0c;只要不调用标签数据&#xff0c;就可以为无监督学习所采用。鸢尾花数据具有4个特征&#xff0c;为了可视化这里选取前两个特征进行聚类分析并指定聚为3类。 #导入库 impor…

大型 3D 互动开发和优化实践 | 京东云技术团队

开发背景 得益于“元宇宙”概念在前段时间的爆火&#xff0c;各家公司都推出了使用 3D 场景的活动或频道。 3D 场景相比传统的 2D 页面优点是多一个维度&#xff0c;同屏展示的内容可以更多&#xff0c;能完整的展示物体、商品的信息。 相应带来的缺点是用户使用方式改变&…