Nginx的localtion指令详解

前言

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 ]
} 
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算-Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值