Nginx location匹配优先级 与 Rewrite

这篇具有很好参考价值的文章主要介绍了Nginx location匹配优先级 与 Rewrite。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

location

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

location 常用的匹配规则

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

location 优先级

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

实例演示

/usr/local/nginx/html 目录
Nginx location匹配优先级 与 Rewrite

配置文件:vim /usr/local/nginx/conf/nginx.conf
Nginx location匹配优先级 与 Rewrite

Nginx location匹配优先级 与 Rewrite
Nginx location匹配优先级 与 Rewrite
Nginx location匹配优先级 与 Rewrite
Nginx location匹配优先级 与 Rewrite
Nginx location匹配优先级 与 Rewrite
Nginx location匹配优先级 与 Rewrite
Nginx location匹配优先级 与 Rewrite

  • location 匹配

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

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

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

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

rewrite前言

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

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

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

  • 例如 http://www.kfc.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 :表示跳转后的内容。
      • 默认情况下只会对域名后面从根目录开始到?前面的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 跳转页面,不会在通过浏览器去在访问一遍,地址栏也是旧的域名地址。
      Nginx location匹配优先级 与 Rewrite

rewrite全局变量

Nginx 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,实现了永久重定向跳转,而且域名后的参数也正常跳转。

Nginx location匹配优先级 与 Rewrite
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 能正常访问,其它地址都是维护页面

Nginx location匹配优先级 与 Rewrite文章来源地址https://www.toymoban.com/news/detail-475904.html

到了这里,关于Nginx location匹配优先级 与 Rewrite的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Location匹配与Rewrite重写

    1.location大致可以分为三类: 精准匹配:location = / {} 一般匹配:location / {} 正则匹配:location ~ / {} 2.location常用的匹配规则:   = :进行普通字符精确匹配,也就是完全匹配。 ^~ :表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location。 ~ :区分大小写的

    2024年02月13日
    浏览(29)
  • c语言[]优先级大于*优先级

    本博文源于笔者正在学习的c语言[]优先级大于*优先级.在定义二维数组时,a+1与[]号结合后,谁的优先级更高,是本博文探讨的话题 想要看看*与[]谁的优先级更高 通过代码发现[]优先级比*号要高(a+1)[1]等价于a+2再取*号就是9了,在第二个pirintf代码中,等价于a[1][1] =6,第三个

    2024年01月20日
    浏览(45)
  • NVIC 简介、抢占优先级和响应优先级

    NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。 如果医院只有医生的话,当看病的人很多时,医生就得安排一下先看谁,后看谁,如果有紧急的病人,那还得让紧急的病人最先来,这个安排先后次序的任务很繁琐,

    2024年02月05日
    浏览(41)
  • 中断处理优先级和中断响应优先级的区别

      中断响应优先级是针对同时到达的中断请求先处理谁的规定。比如A、B同时向CPU发出中断请求,而中断响应优先级是AB,那么CPU就会先处理A,再处理B。   如下图:   中断处理优先级是解决中断嵌套情况下优先处理谁的问题。比如A、B两个中断的中断处理优先级是BA,

    2024年02月11日
    浏览(31)
  • Android 音频策略(音频优先级,音频输入输入,声音优先级)

    音频设备(/system/core/include/system/audio.h) 注意: 这些设备比较常用的就是HDMI,扬声器,3.5mm圆孔耳机,USB耳机,还有蓝牙耳机。本文也主要针对这些设备的输入和输出策略做出说明。 Android音频策略主要是在 frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp中,接下来我们看一

    2024年02月04日
    浏览(49)
  • Linux_进程的优先级&&环境变量&&上下文切换&&优先级队列

    什么是优先级? 指定一个进程获取某种资源的先后顺序 本质是进程获取cpu资源的优先顺序 为什么要有优先级 进程访问的资源(CPU)是有限的 操作系统关于调度和优先级的原则:分时操作系统,基本的公平,如果进程因为长时间不被调整,就造成了饥饿问题 Linux的优先级特

    2024年04月09日
    浏览(43)
  • 机械臂多任务逆运动学(优先级同等和存在优先级)

    我们经常使用微分运动学来计算机器人的逆运动学,对于单个任务的机械臂的逆运动学使用的是梯度投影法: 冗余机械臂求解逆运动学解——梯度投影法 但是对于多任务的逆运动学在一般的机器人学里面很少有提及,最近看到了相关的论述,于是做一下笔记整理一下。 设共

    2024年02月16日
    浏览(42)
  • 【CSS】CSS 特性 ( CSS 优先级 | 优先级引入 | 选择器基本权重 )

    定义 CSS 样式时 , 可能出现  多个 类型相同的 规则   定义在 同一个元素上 , 如果 CSS 选择器 相同  ,  执行 CSS 层叠性  , 根据  就近原则  选择执行的样式 , 如 : 出现两个 div 标签选择器 , 都设置 color 文本颜色 ; 如果 CSS 选择器 不同 ,  则需要考虑 CSS 优先级 问题 ,  需要计

    2024年02月10日
    浏览(38)
  • DSCP 与IP 优先级IP优先级,一个月成功收割腾讯、阿里、字节offer

    DSCP DSCP由RFC2474定义,它重新命名了IPv4报头中TOS使用的那1字节和IPv6报头中数据类(TrafficClass)那1字节,新的名字称为DS字段(Differentiated ServicesField)。该字段的作用没有变,仍然被QoS工具用来标记数据。不同的是IPv4使用3比特,而DSCP使用6比特,最低2比特不用。 RFC2474 定义最

    2024年04月12日
    浏览(46)
  • 【STM32】进阶(一):抢占式优先级和响应式优先级(NVIC_PriorityGroupConfig)

    【STM32】STM32单片机总目录 STM32(Cortex-M3)中每个中断源都有两级优先级:抢占式优先级(pre-emption priority)和子优先级(subpriority),子优先级也叫响应式优先级。 望文知义,就是优先级高的可以抢占优先级的中断。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包