Nginx的localtion指令详解

标签: Nginx服务器  nginx

前言

Nginx 的 HTTP 配置主要包括三个区块,结构如下:

http { 						#协议级别
  include mime.types;
  default_type application/octet-stream;
  keepalive_timeout 65;
  gzip on;
  
    server {			    #这个是服务器级别
      listen 80;
      server_name localhost;
      
        location / {   #这个是请求级别
          root html;
          index index.html index.htm;
        }
    }
}

一、location区段

  • location 是在 server 块中配置,根据不同的 URI 使用不同的配置,来处理不同的请求。
  • location 是有顺序的,会根据不同请求配置的优先级来匹配的location 处理。
  • 基本语法如下:
    location [=|~|~*|^~|@] pattern{……}
    

二、location前缀匹配

=    #表示精确匹配,优先级也是最高的 
^~   #表示uri以某个常规字符串开头,理解为匹配url路径即可 
~    #表示区分大小写的正则匹配  
~*   #表示不区分大小写的正则匹配
!~   #表示区分大小写不匹配的正则
!~*  #表示不区分大小写不匹配的正则
/    #通用匹配,任何请求都会匹配到
@    #内部服务跳转

匹配优先级:

  • 匹配优先级为:从上(=)至下(@)优先级依次递减,也就是说“=”的优先级最高,“@”优先级最低。
  • 多个location配置的情况下匹配顺序为:首先匹配 =,其次匹配^~, 其次是按正则匹配,最后是交给 / 通用匹配。**当有匹配成功时候,停止匹配,**按当前匹配规则处理请求。

三、location配置实例

3.1 无修饰符

必须以指定模式开始

server {
    listen       80;
    server_name  localhost;

    location  /a {
        root    /var/www/nginx;
        index   test.html;
    }
}
[root@server-yum1 ~]# mkdir /var/www/nginx/a/ -p
[root@server-yum1 ~]# echo "hello world !!" >> /var/www/nginx/a/test.html

浏览器端访问:http://10.20.151.8/a/

在这里插入图片描述

3.2 =匹配

server {
    listen       80;
    server_name  localhost;
    access_log  /var/log/nginx/http_access.log  main;

    location / {
        root /var/www/nginx/;
        index a.html index.htm;
    }
    location = / {
        root /var/www/nginx/;
        index b.html index.htm;
    }
}
[root@server-yum1 ~]# echo "location /" > /var/www/nginx/a.html
[root@server-yum1 ~]# echo "location /" > /var/www/nginx/b.html

(1)浏览器端访问:http://10.20.151.8/

在没有跟具体路径时,会优先匹配有“=”的location

在这里插入图片描述
(2)浏览器端访问:http://10.20.151.8/a.html

如果跟了具体路径时,会优先匹配a.html所在的location

在这里插入图片描述

3.3 ~匹配

server {
server_name localhost;
  
  location ~ /a {           #区分(a)大小写的正则匹配
        root /var/www/nginx;
        index a.html index.html;
    }
}
[root@server-yum1 ~]# echo "location ~ /a" > /var/www/nginx/a/a.html

(1)浏览器端访问:http://10.20.151.8/a/

在这里插入图片描述
(2)浏览器端访问:http://10.20.151.8/A/

在这里插入图片描述

3.4 ^~匹配

server {
server_name localhost;

   location ^~ /it/ {       #匹配任何以/it/开始的查询并且停止搜索,不检查正则表达式
       root    /var/www/nginx;
       index   m.html;
   }
}
[root@server-yum1 ~]# mkdir /var/www/nginx/it
[root@server-yum1 ~]# echo "location ^~ /it" > /var/www/nginx/it/m.html

浏览器端访问:http://10.20.151.8/it/

在这里插入图片描述

3.5 ~*匹配

server {
server_name localhost;

   location  ~* \.png$ {         #不区分大小写匹配所有以.png结尾的文件
       root    /var/www/nginx;   #上传图片到发布目录中
   }
}
[root@server-yum1 nginx]# rz -y  #上传test.png图片

浏览器端访问:http://10.20.151.8/test.png

在这里插入图片描述

总结

location 区段匹配示例:

location = / {              # 只匹配 / 的查询
  [ configuration A ]
}
location / {                # 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配
  [ configuration B ]
}
location ^~ /images/ {      # 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式
  [ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ { # 匹配任何以gif、jpg、jpeg结尾的文件
  [ configuration D ]
} 
版权声明:本文为IT_ZRS原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/IT_ZRS/article/details/108682517

智能推荐

几个重要的arm指令详解

几个重要的arm指令详解 STR(store) 使用格式:STR{条件} Rd,[Rbase] 存储Rd到Rbase所包含的有效地址 LDR(load) 使用格式:LDR{条件} Rd,[Rbase] 或者伪 指令LDR{条件} Rd,=value 加载地址Rbase中的值到Rd中;伪指令拆分为几个真正的指令,加载value到 Rd中 STMDB(store many decrease befor...

详解CPU的指令执行步骤

补充知识 取指 译码 执行 回写 总结 ======================================= 补充知识: 不知道你能不能看懂汇编指令,如: 取指: CPU的控制电路将 PC(Program Counter )程序计数器 , 通过内部总线传递到 MAR (Memory Address Register 内存地址寄存器)。 MAR通过地址总线将指令地址发送到存储器内的MAR,...

linux 安装 nginx, nginx指令

安装 指令 报错解决方案 1...

Varnish部署cdn节点集群

varnish配置过程 实验环境: 三台虚拟机 server1(172.25.7.1)作为varnish主机,server2(172.25.7.2)与server3(172.25.7.3)均为apache主机 varnish 的安装部署 varnish主机上: 1.获取varnish安装包并下载安装包 配置文件: 2.修改varnish的监听端口 3.修改varnish配置文件 4.开启服务 se...

redis-cli常用命令

1、设置键值对 2、获取指定键的值 3、同时设置一个或多个键值对 4、同时获取一个或多个键的值 5、将指定键的数值+1(key不存在,则初始化为0,再+1) 6、将指定键的值-1(key不存在,则初始化为0,再-1) 7、指定键自增多少 8、指定键自减多少 9、获取所有key列表 10、删除指定键 11、设置指定键的过期时间(秒为单位) 12、查看key的过期时间 13、选择库 14、清空整个re...

猜你喜欢

pat-1052 Linked List Sorting (64bit) (25分)

pat-1052 Linked List Sorting (64bit) (25分) 参加晴神的《算法笔记》 大概说几点我遇到的问题以及总结: 1.pat链表内容的题目还是挺常规的,除非是工程应用或者leetcode的题目,它会使用指针实现数组。但是我做到现在,pat的题目都是:思量是链表,但是实现的是静态的方式。(xxx这里我会给一些链表的模板,还是很简单的。这里留一个空) 2.关于代码的一个小...

进程间通信——管道

原文地址:点击打开链接 一.管道容量:管道容量分为pipi capacity 和 pipe_buf .这两者的区别在于pipe_buf定义的是内核管道缓冲区的大小,这个值的大小是由内核设定的,这个值仅需一条命令就可以查到;而pipe capacity指的是管道的最大值,即容量,是内核内存中的一个缓冲区。pipe_buf: 命令:ulimit -a在终端输入该命令就会出现如下一表: 管道容量 siz...

“不会Linux,到底有多可怕?”高级程序员:这是必学技能!你说呢?

点击上方“Python大本营”,选择“置顶公众号” 最近我们发现,有很多程序员在CSDN博客发帖讨论:程序员是否需要学习Linux。 关于这个问题,其实答案很简单:这是程序员的必备技能。 为什么这么说? 1)应用广泛:回想下你用的各种软件、网站,比如:淘宝,用 QQ、微信等,其实这些软件和服务的背后,都是成千上万的 Linux 系统在支撑。 2)求职...

Java 5行代码搞定Excel导入导出

Java 5行代码搞定Excel导入导出 场景 使用 创建表格映射对象 导出演示 导入演示 引入 maven github 场景 在工作中,导出Excel的场景经常出现,比如管理后台导出的功能、批量订正数据库等,在这些场景中的表格数据往往对应数据库的一条记录,表格格式十分简单。但是,类似导入导出都要用不同的代码实现。产品经常给笔者一个Excel表格数据,导入到数据库。每次都要写一堆功能、流程类似的...

python学习——Anaconda与PyCharm

一、Anaconda与Pycharm简述 Anaconda是一个用于科学计算的Python发行版,核心功能是包管理和环境管理,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。 PyCharm是一种Python IDE,为用户提供IDE开发环境,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完...