nginx中的location指令

1、location 介绍

location是Nginx中的块级指令(block directive),location指令的功能是用来匹配不同的url请求,进而对请求做不同的处理和响应,这其中较难理解的是多个location的匹配顺序,本文会作为重点来解释和说明。

开始之前先明确一些约定,我们输入的网址叫做请求URI,nginx用请求URI与location中配置的URI做匹配。

2、localtion 语法

location有两种匹配规则:

  • 匹配URL类型,有四种参数可选,当然也可以不带参数。

    location [ = | ~ | ~* | ^~ ] uri { … }

  • 命名location,用@标识,类似于定于goto语句块。

    location @name { … }

location匹配参数解释:

(1) “=” ,精确匹配

  • 内容要同表达式完全一致才匹配成功

location = /abc/ {.....}# 只匹配http://abc.com/abc
#http://abc.com/abc [匹配成功]
#http://abc.com/abc/index [匹配失败]

(2) “~”,执行正则匹配,区分大小写。

location ~ /Abc/ {.....
}
#http://abc.com/Abc/ [匹配成功]
#http://abc.com/abc/ [匹配失败]

(3)“~*”,执行正则匹配,忽略大小写

location ~* /Abc/ {.....
}
# 则会忽略 uri 部分的大小写
#http://abc.com/Abc/ [匹配成功]
#http://abc.com/abc/ [匹配成功]

(4)“^~”,表示普通字符串匹配上以后不再进行正则匹配。

location ^~ /index/ {.....
}
#以 /index/ 开头的请求,都会匹配上
#http://abc.com/index/index.page  [匹配成功]
#http://abc.com/error/error.page [匹配失败]

(5)不加任何规则

  • 不加任何规则时,默认是大小写敏感,前缀匹配,相当于加了“~”与“^~”

location /index/ {......
}
#http://abc.com/index  [匹配成功]
#http://abc.com/index/index.page  [匹配成功]
#http://abc.com/test/index  [匹配失败]
#http://abc.com/Index  [匹配失败]
# 匹配到所有uri

(6)“@”,nginx内部跳转

location /index/ {error_page 404 @index_error;
}
location @index_error {.....
}
#以 /index/ 开头的请求,如果链接的状态为 404。则会匹配到 @index_error 这条规则上。

3、location匹配顺序

= > ^~ > ~ | ~* > 最长前缀匹配 > /

序号越小优先级越高

  1. location =    # 精准匹配

  2. location ^~   # 带参前缀匹配

  3. location ~    # 正则匹配(区分大小写)

  4. location ~*   # 正则匹配(不区分大小写)

  5. location /a   # 普通前缀匹配,优先级低于带参数前缀匹配。

  6. location /    # 任何没有匹配成功的,都会匹配这里处理

举例

location = /  {
#规则A
}location = /login {
#规则B
}location ^~ /static/ {
#规则C
}location ~ \.(gif|jpg|png|js|css)$ {
#规则D
}location ~* \.png$ {
#规则E
}location !~ \.xhtml$ {
#规则F
}location !~* \.xhtml$ {
#规则G
}location / {
#规则H
}

匹配结果:

访问根目录/, 比如http://localhost/ 将匹配规则A访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H访问 http://localhost/static/a.html 将匹配规则C访问 http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用, 而 http://localhost/static/c.png 则优先匹配到 规则C访问 http://localhost/a.PNG 则匹配规则E, 而不会匹配规则D,因为规则E不区分大小写。访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到。访问 http://localhost/qll/id/1111 则最终匹配到规则H,因为以上规则都不匹配。

4、location URI结尾带不带 /

  1. 如果 URI 结构是 https://domain.com/ 的形式,尾部有没有 / 都不会造成重定向。因为浏览器在发起请求的时候,默认加上了 / 。虽然很多浏览器在地址栏里也不会显示 / 。这一点,可以访问百度验证一下。

  2. 如果 URI 的结构是 https://domain.com/some-dir/ 。尾部如果缺少 / 将导致重定向。因为约定,URL 尾部的 / 表示目录,没有 / 表示文件。所以访问 /some-dir/ 时,服务器会自动去该目录下找对应的默认文件。如果访问 /some-dir 的话,服务器会先去找 some-dir 文件,找不到的话会将 some-dir 当成目录,重定向到 /some-dir/ ,去该目录下找默认文件。

举个例子:

server {listen       9001;server_name  www.abc.com;location ~ /edu {proxy_pass http://127.0.0.1:8080;}}

我们访问www.abc.com:9001/edu,看下效果

图片

访问 /edu 时,服务器首先去找edu文件,找不到则将edu当做目录,重定向到 /edu/,在该目录下找默认文件。

但是如果想这两种请求对应不同的处理,就要明确增加不带/结尾的location配置。例如:

location  /doc {proxy_pass http://www.doc123.com
}
location  /doc/ {proxy_pass http://www.doc456.com
}

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

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

相关文章

容器底层实现技术Namespace/Cgroup

Docker容器实现原理 Docker容器在实现上是通过namespace技术来进行进程隔离,通过cgroup技术实现容器进程可用资源的限制,当docker启动一个容器时,实际是创建了多了namespace参数的进程。 Namespace Namespace:命名空间 作用&#…

异方差与多重共线性对回归问题的影响

异方差的检验 1.异方差的画图观察 2.异方差的假设检验,假设检验有两种,一般用怀特检验使用方法在ppt中,课程中也有实验,是一段代码。 异方差的解决办法 多重共线性 多重共线性可能带来的影响: 多重共线性的检验 多重…

如何修改Docker的镜像源

改或新增/etc/docker/daemon.json 文件 vi/etc/docker/daemon.json 添加需要修改的国内镜像源镜像源 { "registry-mirrors":["http://hub-mirror.c.163.com"] } 重启Docker服务 Systemctl restart docker.service 方法二 修改或新增 /etc/sysconfig…

Oracle行转列语法总结大全

一、decode语法 SELECT deptno, nvl(SUM(decode(job, MANAGER, sal)), 0) s_MANAGER, nvl(SUM(decode(job, ANALYST, sal)), 0) s_ANALYST, nvl(SUM(decode(job, CLERK, sal)), 0) s_CLERK, nvl(SUM(decode(job, PRESIDENT, sal)), 0) s_PRESIDENT, …

Nginx的11个执行流程

1 Nginx简介 Web服务器市场份额 Nginx [engine x] 最初由 Lgor Sysoev 编写。根据 Netcraft 的数据,到2020年9月,Nginx 服务或代理了25.76%站点,市场份额占到了约34.03%。 Nginx 被广泛用作: HTTP服务器…

Nginx的执行阶段详解

在了解nginx的执行阶段前,先看一个例子 对echo不熟悉的,可以先看文章Nginx调试必备了解下echo扩展 回到上面这个例子,在server块中配置这样的location,你觉得输出是什么样子? 按照正常的逻辑,输出应该是32 …

Docker挂了,数据如何找回

docker在实际使用中,让运维人员诟病的,除了安全问题外,大概就是数据的问题了 很多人在初用docker的时候,很多时候都忘记或不知道docker中需要保留的数据需要挂载到宿主机文件夹到容器内部对应目录(当然除了挂载宿主机目…

TCP总结

TCP这些东西,基本每个程序猿都或多或少是掌握的了。虽然感觉在实际开发中没有什么用武之处,但,面试他要问啊 而最近大家伙过完年,也都在准备春招,我也一样。阅读了一些okHttp源码之后,又屁颠屁颠地跑回来重…

LDAP组的概念以及命令

Oracle统一目录支持组,组是作为单个对象管理的条目集合。通常,目录管理员配置打印机组、软件应用程序组、员工组等。在为一组用户分配特殊访问权限时,组尤其有用。例如,您可以配置一组访问管理器,并分配权限&#xff0…

oracle中修改process

可以用如下命令查看数据库连接的消耗情况 select b.MACHINE, b.PROGRAM, b.USERNAME, count(*) from v$process a, v$session b where a.ADDR b.PADDR and b.USERNAME is not null group by b.MACHINE, b.PROGRAM, b.USERNAME order by count(*) desc 在 oracle中&…

安装python3.9

GCC版本 这个版本的编译器不适合编译Python3.9&#xff0c;在编译时会产生如下的错误。我们用这个老版本编译器编译一个新的GCC 9.2版。 Could not import runpy module Traceback (most recent call last):File "Python-3.8.1/Lib/runpy.py", line 15, in <mod…

Oracle数据库游标数总结

各用户的打开游标总数 SELECT A.USER_NAME, COUNT(*) FROM V$OPEN_CURSOR A GROUP BY A.USER_NAME; 查找数据库各用户各个终端的缓存游标数 SELECT AA.USERNAME, AA.MACHINE, SUM(AA.VALUE) FROM ( SELECT A.VALUE, S.MACHINE, S.USERNAME FROM V$SESSTAT A, V$STATNAME B, V…

logstash安装

下载最新版logstash https://www.elastic.co/cn/downloads/logstash 解压缩 tar zxvf logstash-7.12.1-linux-x86_64.tar.gz 下载jdk1.8 tar zxvf jdk-8u291-linux-x64.tar.gz 编辑启动文件logstash、logstash.lib.sh、logstash-plugin 在首行添加 export JAVA_C…

[logstash-input-file]插件使用详解

这个插件可以从指定的目录或者文件读取内容&#xff0c;输入到管道处理&#xff0c;也算是logstash的核心插件了&#xff0c;大多数的使用场景都会用到这个插件&#xff0c;因此这里详细讲述下各个参数的含义与使用 1 path 是必须的选项&#xff0c;每一个file配置&#xff0c…

[logstash-input-log4j]插件使用

Log4j插件可以通过log4j.jar获取Java日志&#xff0c;搭配Log4j的SocketAppender和SocketHubAppender使用&#xff0c;常用于简单的集群日志汇总。 最小化的配置 input {log4j {host>"localhost"port>4560} } output {stdout {} } log4j插件配置host以及port就…

logstash-input-redis插件使用详解

input {#redis {#host> "10.246.187.12"#redis地址#host> "10.246.152.116"#redis地址#port > "6379" #redis端口号#password > "123qwe" #如果有安全认证&#xff0c;此项为密码#key > "logstash:redis"#ty…

logstash-input-redis源码解析

首先是程序的自定义&#xff0c;这里设置了redis插件需要的参数&#xff0c;默认值&#xff0c;以及校验等。 然后注册Redis实例需要的信息&#xff0c;比如key的名字或者url等&#xff0c;可以看到默认的data_type是list模式。 程序运行的主要入口&#xff0c;根据不同的dat…

SSL双向认证和SSL单向认证的区别

双向认证 SSL 协议要求服务器和用户双方都有证书。单向认证 SSL 协议不需要客户拥有CA证书&#xff0c;具体的过程相对于上面的步骤&#xff0c;只需将服务器端验证客户证书的过程去掉&#xff0c;以及在协商对称密码方案&#xff0c;对称通话密钥时&#xff0c;服务器发送给客…

双向认证SSL原理

文中首先解释了加密解密的一些基础知识和概念&#xff0c;然后通过一个加密通信过程的例子说明了加密算法的作用&#xff0c;以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释&#xff0c;并讨论一下windows中数字证书的管理&#xff0c;最后演示使用makecert生成…

Xtrabackup备份与恢复

一、Xtrabackup介绍 Percona-xtrabackup是 Percona公司开发的一个用于MySQL数据库物理热备的备份工具&#xff0c;支持MySQL、Percona server和MariaDB&#xff0c;开源免费&#xff0c;是目前较为受欢迎的主流备份工具。xtrabackup只能备份innoDB和xtraDB两种数据引擎的表&…