首页 > 系统相关 >19、nginx中location语法

19、nginx中location语法

时间:2024-01-18 14:12:59浏览次数:29  
标签:匹配 19 192.168 nginx 正则 html location 78.3

1. 概述

  • 在实际应用中,权限控制的需求更加复杂。例如,对于网站下的img目录允许所有用户访问,但对于网站下的admin目录则仅允许管理员身份的用户访问。此时,仅靠denyallow这两个权限指令不能满足用户的需求,还需要使用location块来完成相关需求的匹配。

2.location语法


location [=|~| ~* | ^~] URI { .... } #语法类型1
location @name { .... } 			 #语法类型2
  • 在上述语法中=、~、~*、^~、@都是location用于实现访问控制的前缀,且在使用时只能选择一种,当然也可以不设置前缀。
前缀 说明
= 根据其后的指定模式进行精准匹配。例如,在访问时要与/html/aaa/index.html完全一致才会执行其后的指令块
~ 使用正则表达式完成location的匹配,区分大小写
~* 使用正则表达式完成location的匹配,不区分大小写
^~ 不使用正则表达式,完成以指定模式开头的location匹配
@ 用于定义一个location块,且该块不能被外部客户端所访问,只能被Nginx内部配置指令所访问

2.1 精准匹配

  • 所谓精准匹配指的就是用户访问的URI与指定的URI完全一致的情况,才会执行其后的指令块,示例配置如下。
server {
    listen 80;
    server_name localhost;
    root html;
    index index.html index.htm;
    
    location=/js {
        allow 192.168.78.128;
    }
    
    location =/admin/auth{
        allow 192.168.78.200;
    }
    
    deny all;
}
URL A用户响应结果(192.168.78.128) B用户响应结果(192.168.78.200)
http://192.168.78.3 403 Forbidden 403 Forbidden
http://192.168.78.3/js 404 Not Found 403 Forbidden
http://192.168.78.3/admin/auth 403 Forbidden 404 Not Found
http://192.168.78.3/admin 403 Forbidden 403 Forbidden

符合匹配规则,网页显示404 Not Found,不符合时显示403 Forbidden

2.2 正则匹配

  • Nginx配置文件中,多个正则 location之间按照正则location 在配置文件中的书写顺序进行匹配,且只要匹配成功就不会继续匹配后面定义的正则location。
location ~\.html$ {
    allow all;
}

location ~^/aaa/.*\.html${
    deny all;
}

URL 响应结果
http://192.168.78.3/test.html 404 Not Found
http://192.168.78.3/aaa/test.html 404 Not Found

当location中的URI与用户请求中以.html为结尾的文件匹配上时,正则location停止了继续匹配,因此显示结果都为404 Not Found

调换上述两个location代码块的编写顺序,再次访问 http://192.168.78.3/test.html结果依然为404 Not Found,而访问 http://192.168.78.3/aaa/test.html的结果为403 Forbidden.

正则location的编写顺序不同,则结果不同,且只有前面定义的正则location匹配不成功的情况下,才会继续匹配后面的正则location。

2.3 最大前缀匹配

  • 由于location可以同时定义多个,当一个配置文件中同时出现多个location时,普通 location 之间遵循最大前缀匹配原则。通俗地讲就是,匹配度最高的location 将会执行。
location /ng.test {
    allow all;
}

location /ng.test/log {
    deny all;
}

URL 响应结果
http://192.168.78.3/ng.test 404 Not Found
http://192.168.78.3/ng.test/log 403 Forbidden
http://192.168.78.3/ng.test/log/date 403 Forbidden
  • 当最大前缀location与正则location同时存在时,如果正则 location 匹配成功,则不会执行最大前缀location。

    location / {
        deny all;
    }
    
    location ~\.html$ {
        allow all;
    }
    
URL 响应结果
http://192.168.78.3 403 Forbidden
http://192.168.78.3/notfound.html 404 Not Found
http://192.168.78.3/index.php 403 Forbidden
  • location / {} 与location = / {}的区别
    • location / {} 遵守普通 location的最大前缀匹配,由于任何 URI 都必然以/根开头,所以对于一个URI,若配置文件中有更合适的匹配则会将其替代,否则返回location / {} 匹配到的结果,它相当于站点默认配置。
    • location = / {} 遵守的是精准匹配,也就是只能匹配该站点根目录,同时会禁止继续搜索正则 location ,效率比 location/ {} 要高。因此,若在开发中能确定精准匹配的情况,可以采用location = / {} 的方式,提升匹配效率。

2.4 禁用正则匹配

  • 利用=精准匹配或^~非正则匹配可以在正则匹配之前优先匹配,从而禁止执行原有的正则匹配。下面在server块中添加以下几条location匹配规则,具体如下。
location =/aaa/test.html {
	allow all;
}

location ^~/ {   
	deny all;
}

location ~\.html${
	allow all;
}
  • =用于精准匹配网站根目录下的/aaa/test.html
  • ^~用于非正则匹配网站根目录下的文件
  • ~用于正则匹配网站根目录下以.html为结尾的文件
URL 响应结果
http://192.168.78.3 403 Forbidden
http://192.168.78.3/index.html 403 Forbidden
http://192.168.78.3/bbb/test.html 403 Forbidden
http://192.168.78.3/aaa/test.html 404 Not Found

在使用了=^~前缀时,普通 location 匹配后将不再执行正则 location的匹配。

前缀=^~虽然都能阻止继续搜索正则 location ,不同的地方是它们遵循的规则不同,^~依然遵循最大前缀匹配规则,而=则严格按照精准匹配执行。因此,当多种类型的 location 匹配同时出现时,最终执行结果为=匹配优先于^~匹配,^~匹配优先于正则匹配,正则匹配优先于普通的最大前缀匹配。只要优先的location匹配成功,就不会执行其他的 location。

标签:匹配,19,192.168,nginx,正则,html,location,78.3
From: https://www.cnblogs.com/ccblblog/p/17972381

相关文章

  • CF1921 F Sum of Progression 题解
    QuestionCF1921FSumofProgression给定一个序列\(\{a\}\),有\(q\)组询问,对于每组询问\(s,d,k\),求\[a_s+a_{s+d}\cdot2+\cdots+a_{s+d(k-1)}\cdotk\]Solution\(s,d,k\)其实就是在描述一个等差数列考虑到\(d\timesk\len\)如果\(d\)很大,那么就意味着\(k\)很......
  • 梦幻内存!全何为AMD撕裂者打造192GB DDR5-7200
    1月16日消息,全何科技(V-Color)宣布,面向AMD锐龙线程撕裂者7000系列处理器,推出顶级的192GBDDR5内存套装,频率最高可达7200MHz。AMD撕裂者7000系列支持四通道DDR5内存,单系统可以插四根,虽然不及撕裂者PRO7000系列的八通道,但在消费级领域也是无敌的存在。全何新内存采用精选的SK海......
  • 18、nginx访问控制
    1.权限控制指令Nginx中提供了两个用于配置访问权限控制的指令,分别为allow和deny。allow用于设置允许访问的权限deny用于设置禁止访问的权限。在使用时,权限指令后只需跟上允许或禁止的IP、IP段或all即可。其中all表示所有的。单个IP指定作用范围最小,all指定作用范围最......
  • Nginx 限制url访问图片资源文件
    nginx配置 location^~/uploads/{//图片文件路径valid_referersblockedwww.baidu.com;//允许访问的域名if($invalid_referer){#rewrite^/http://www.hugwww.com/daolian.gif;retur......
  • 使用nginx代理emqx的TCP、WS、WSS连接请求
    项目代理关系: 注:主机上已存在名为:nginx-proxy的一级nginx的代理,将监听了主机的80、443端口docker-compose.ymlversion:"3.7"services:emqx:image:emqx/emqx:4.4.18restart:unless-stoppedcontainer_name:emqxenvironment:EMQX_ADMI......
  • 19.电子商城接口自动化测试 实战
    目录 接口测试流程产品需求分析测试用例设计思路接口自动化脚本编写接口测试流程 @startuml:需求分析;:测试设计;:测试用例评审;:测试执行;:验收;:预发布;:上线;@enduml电子商城需求分析 商城管理后台商城客户端商城业务场景 ......
  • Docker初级:Docker安装部署Nginx、Tomcat
    Docker初级:Docker安装部署Nginx、Tomcat:https://blog.csdn.net/Zp_insist/article/details/127636875?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170548607116800188590783%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170548......
  • 利用nginx搭建rtmp流服务器
    1、RTMP介绍RTMP全程RealTimeProtocal(实时小时传输协议)。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS、RTMPE等多种变种协议。RTMP是是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数......
  • 微软用它取代了`Nginx`吞吐量提升了百分之八十!
    微软用它取代了`Nginx`吞吐量提升了百分之八十! Azure应用服务用YARP取代了Nginx,获得了80%以上的吞吐量。他们每天处理160B多个请求(1.9mRPS)。这是微软的一项了不起的技术创新。首先我们来介绍一下什么是YarpYarp是什么?YARP(YetAnotherReverseProxy)是一个开源的、高......
  • nginx的https证书自动续期
    nginx的https证书自动续期本文讲述nginx的https证书如何自动续期。顺便讲述如何手动续期,如何方便地管理所有域名证书。有很多实现方案,包括收费方案和免费方案,本文采用的是acme.sh方案。1.安装acme客户端需要将系统环境切换到root用户下执行,否则安装证书时可能会失败......