【nginx】nginx之location规则详解:

这篇具有很好参考价值的文章主要介绍了【nginx】nginx之location规则详解:。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、语法规则:
= 开头表示精确匹配

^~ 开头表示uri以某个常规字符串开头,理解为匹配url路径即可(非正则)

~ 开头表示区分大小写的正则匹配

~* 开头表示不区分大小写的正则匹配

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则

/ 通用匹配,任何请求都会匹配到
二、优先级:
等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他location的匹配项

^~和通用匹配。使用前缀匹配,不支持正则表达式,如果有多个location匹配成功的话,不会终止匹配过程,会匹配表达式最长的那个(下方有例子)

如果上一步得到的最长的location为^~类型,则表示阻断正则表达式,不再匹配正则表达式

如果上一步得到的最长的location不是^~类型,继续匹配正则表达式,只要有一个正则成功,则使用这个正则的location,立即返回结果,并结束解析过程

【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维

三、验证:
1、精确匹配:

在conf.d文件夹下创建配置文件test.com.conf,内容如下:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维
上图中第一个和第二个location匹配条件一样,都是/test.html,但第二个为精准匹配到静态路径,因此第一个不会执行,会执行第二个,www.test.com为本地域名解析,access_log和error_lor可以单独为每个模块定义日志
通过域名和路径访问后的内容如下:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维
注意:路径/usr/share/nginx/test_html文件夹下需要有test.html才可以正常访问

上图中指定静态资源路径用的关键字root,还可以用alias,那么root和alias的区别是什么?
(1)用root属性指定的值是要加入到最终路径中的,匹配条件会拼接到路径中
(2)用alias属性指定的值不需要加入到最终路径中

如上图中所示,请求的条件为test.html,通过root指定的路径为/usr/share/nginx/test_html,因此在匹配的时候,这个路径下就必须要有test.html这个文件才可以,否则就会找不到而报错,如果用alias,那么通过浏览器进行请求的时候,alias也是指定到/usr/share/nginx/test_htm路径下,但是会匹配默认的index.html,而无须强制匹配test.html,但是此时就不能使用”=”来进行精确匹配,现在将root改为alias,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维
注意:alias指定的路径结尾要加”/”

下面的配置文件采用roo指定路径,当通过域名请求http://www.test.com/html/的时候,将跳转到/usr/share/nginx/html/下的index.html页面,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维

下面的配置文件采用alias指定路径,请求http://www.test.com/linshi/的时候,将跳转到/usr/share/nginx/test_html/index.html页面,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维

2、通过^~方式实现匹配:

例如:下面配置文件有两条规则,分别匹配url以字母a开头,但是长度不同,首先将长的规则先注释掉,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维

通过curl请求查看状态码,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维

说明:当前只有一个规则开启,因此当匹配url以/a/开头的任何url时,都会返回状态码666

现在将第二条规则注释取消,打开规则,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维
再次发起同样的请求,观察返回状态码,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维

从上图可以看出,两条规则同时被匹配成功,但是第二条规则比较长,因此第二条规则优先被匹配,如果^~匹配成功了,那么表示阻断正则表达式,不再进行正则匹配

3、通过”~”方式实现匹配:

上图中的匹配规则都是通过”^~”方式来实现的,那么在匹配最长规则的时候又分为两种情况:
第一种:最长规则通过~来实现匹配(上图中的最长规则就是通过~实现)
第二种:最长的规则不是通过^~实现匹配,而是通过普通匹配来实现

当最长规则是通过普通匹配的时候,将会继续正则匹配, 只要有一个正则成功,则使用这个正则的location,停止继续匹配,返回结果
现在将第二条规则改为普通匹配,并添加一条正则匹配,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维
再次执行同样的请求命令,得到的状态码如下:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维

说明:从上图可以看出请求/a/b/的时候,首先会到达第二条规则(最长规则),由于第二条规则为普通匹配(不是^~匹配),因此会继续去匹配正则,也就是第三条规则,因此最终返回状态码为888

4、通过"~*"方式实现匹配:

” ~* ” 表示不区分大小写的正则匹配
例如:通过url请求/a/b/或者/A/B/,查看返回状态码,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维
请求结果如下:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维
从上图可以看出,无论匹配的是大写还是小写,都会返回对应状态码888
常用方法还有匹配图片后缀,并返回指定信息,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维

5、”!~*” 和”!~” 不常用,再次不做介绍
6、通过”/” 实现通用匹配:

本例子中,9091服务为httpd
第一种情况:proxy_pass最后面没有斜杠,匹配路径有斜杠(/bbb/),如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维
说明:proxy_pass最后面没有斜杠”/”,此时通过浏览器请求http://10.9.2.248/bbb/,那么实际访问的地址就是 http://10.9.2.248:9091/bbb/,会将匹配路径/bbb一起加过去
此时如果在http的目录页面目录htdocs中创建目录bbb,在bbb目录下创建文件index.html,然后即可实现正常访问,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维

第二种情况: proxy_pass最后面有斜杠 “/”,匹配路径也有斜杠(/bbb/),如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维
说明:proxy_pass最后面有斜杠”/”,此时通过浏览器请求http://10.9.2.248/bbb/,那么实际访问的地址就是 http://10.9.2.248:9091,会将/bbb抛弃的,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维

第三种情况:proxy_pass后面还有其他路径但是最后没有 “/”, 匹配路径也有斜杠(/bbb/) ,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维
说明,此时通过浏览器访问http://10.9.2.248/bbb/index.html,实际请求的是http://10.9.2.248/cxxindex.html(注意位置是默认路径下,不是ccc路径下,如果proxy_pass的路径为/ccc/ddd,那么实际请求的就是ccc路径下的cccindex.html)
在httpd的默认路径下(htdocs)创建文件cxxindex.html,然后访问,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维

第四种情况: proxy_pass后面还有其他路径但是最后有 “/”, 匹配路径也有斜杠(/bbb/) ,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维
说明:此时通过浏览器访问:http://10.9.2.248/bbb/index.html,实际访问的是http://10.9.2.248/ccc/index.html
在httpd默认路径下(htdocs)创建一个名称为ccc的文件夹,在内部定义一个index.html,然后访问,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维

第五种情况:location匹配路径末尾没有 “/”,proxy_pass后面也没有”/”,如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维
说明:8081端口为httpd的服务器端口,如果匹配路径和proxy_pass后都没有”/”,那么此时访问http://10.9.2.248/bbb,默认将请求到http://127.0.0.1:8081/bbb/index.html的内容,此时在httpd默认路径htdocs下创建文件夹bbb,内部创建index.html,定义内容为:i am match bbb,通过IP请求如图:
【nginx】nginx之location规则详解:,nginx,nginx,chrome,运维文章来源地址https://www.toymoban.com/news/detail-607877.html

到了这里,关于【nginx】nginx之location规则详解:的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Nginx正则表达式、location匹配、Rewrite重写详解

    ^ 匹配输入字符串的起始位置 $ 匹配输入字符串的结束位置 * 匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll” + 匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o” ? 匹配前面的字符零次或一次,例如“do(es)?”能匹配“

    2024年02月07日
    浏览(76)
  • nginx使用详解:转发规则、负载均衡、server_name

    该指令用于匹配 URL,语法如下: 指令 说明 = 用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配 成功,就停止继续向下搜索并立即处理该请求。 ~ 用于表示 uri 包含正则表达式,并且区分大小写。 ~* 用于表示 uri 包含正则表达式,并且不区分大小写。

    2024年01月17日
    浏览(38)
  • 【Kubernetes运维篇】ingress-nginx实现业务灰度发布详解

    1、场景一:将新版本灰度给部分用户 假设线上运行了一套对外提供 7 层服务的 Service A 服务,后来开发了个新版本 Service AA需要上线,但不想直接替换掉原来的 Service A,希望先灰度一小部分用户,等运行一段时间足够稳定了再逐渐全量上线新版本,最后平滑下线旧版本。 这

    2024年02月15日
    浏览(43)
  • 【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)

    这篇文章给大家介绍下iptables防火墙,防火墙大致分三种,分别是硬件、软件和云防火墙。硬件的话部署在企业网络的入口,有三层路由的H3C、华为、Cisco(思科),还有深信服等等;软件的话一般是开源软件,写在网站内部,最常见的有iptables(写入Linux内核)和firewalld(C

    2024年02月09日
    浏览(29)
  • Nginx location

    location块是nginx配置文件中,配置在http块中的server块中,匹配的是uri location匹配uri的方式 : 精确匹配: location = /[ ...} 正则匹配: location - /{ ...} 一般匹配: location /{ ....} 匹配的规则: = :精确匹配,完全匹配,错一个字都匹配到,必须完全一致。 ^~ : 匹配普通字符,前缀匹配

    2024年02月14日
    浏览(27)
  • Nginx Location 基本配置

    基本语法格式: 1.等于匹配符:= 等于匹配符就是等号,特点可以概括为两点: 精确匹配,优先级最高,匹配成功后则停止向下搜索 不支持正则表达式 2.空匹配符 空匹配符的特点是: 匹配以指定模式开始的 URI,区分大小写,字符串匹配 不支持正则表达式 3.正则匹配符:~

    2024年02月08日
    浏览(40)
  • 【Nginx06】Nginx学习:HTTP核心模块(三)Location

    Location 是整个 HTTP 模块中非常重要的一个子模块,它是为某个请求URI(路径)建立配置。这个模块又是属于 Server 模块的子模块,同时它还可以嵌套在另一个 Location 模块下面,因此,它的作用范围是 server 和 location 。其实,说白了,也就是我们可以为指定的一些路径去做一些

    2024年02月15日
    浏览(32)
  • Chrome 插件匹配模式(Match patterns)规则

    匹配模式是采用以下结构的网址,用于指定一组网址: 1. scheme 必须是以下内容之一,并使用双斜线 ( // ) 与格式的其余部分分隔开: http https 通配符  * ,仅与  http  或  https  匹配 file 2. host 主机名 ( www.example.com )。 主机名前的  * (用于匹配子网域 ( *.example.com )),或仅使

    2024年01月19日
    浏览(26)
  • 理解nginx的 location 和root

    1.如果理解 location 和root 当用户输入 localhost:8080 / 时,首先会匹配到 location / 即 箭头1所指向 ,然后再去 root 下寻找根目录 /home/www 即 箭头2所指方向 , 总结来说当用户在浏览器输入 localhost:8080 / 时(当然你不加/也默认也是访问的也是根目录/),nginx 会向 本机的 /home/www / 寻找资源

    2023年04月08日
    浏览(27)
  • Nginx重写功能location与rewrite

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

    2024年01月20日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包