zoukankan      html  css  js  c++  java
  • nginx之location

    一. location使用语法

    location [ = | ~ | ~* | ^~ ] URI {

    ...

    }

    说明:

    1. 其中URI可以是普通的字符串地址路径,或者是正则表达式,匹配成功后执行后面大括号里的相关指令

    2. URI前面的匹配标识说明

      = 开头表示精确匹配,
      /和^~ 开头表示常规字符串,
      正则表达式匹配可以使用 ~(区分大小写匹配)和 ~* (不区分大小写匹配),!~ 和 !~* 则表示不匹配
    
    总结
    1. 普通location会先于正则location进行匹配。
    2. 如果匹配到普通之后,想结束不再匹配正则的location,那么可以在普通的location前面加上 ^~这两个符号。
    3. 如果继续匹配正则location,正则匹配到的结果会覆盖普通匹配到的结果。
    4. 匹配正则的过程中,和正则的为上下位置有关系,因为正则location是匹配到一个随即停止匹配。并不存在普通location的最大前缀匹配原则。

    二. location匹配示例

    location = / {
            [ 配置1 ]
    }
    
    location / {
            [ 配置2 ]
    }
    
    location /documents/ {
            [ 配置3 ]
    }
    
    location ^~ /images/ {
            [ 配置4 ]
    }
    
    location ~* .(gif|jpg|jpeg)$ {
            [ 配置5 ]
    }

    不同URI对应的配置

    用户请求的URI 完整的URL地址 匹配的配置
    / http://www.etiantian.org/ 配置1
    /index.html http://www.etiantian.org/index.html 配置2
    /documents/document.html http://www.etiantian.org/documents/document.html 配置3
    /images/1.gif http://www.etiantian.org/images/1.gif 配置4
    /documents/1.jpg http://www.etiantian.org/documents/1.jpg 配置5

    三. location匹配实战

    验证不同的location标签生效的顺序,nginx配置文件如下

    server {
            listen    80;
            server_name    www.etiantian.org etiantian.org;
            root html/www;
    
            location / {
                return 401;
            }
          
            location= / {
                return 402;
            }
    
            location /documents/ {
                return 403;
            }
    
            location ^~ /images/ {  匹配任何以/images/开头的查询并停止搜索,任何正则表达式匹配不会做检查
    return
    404; } location ~* .(gif|jpg|jpeg)$ { return 500; } }

    检查语法并使修改的配置重启生效后测试网站请求

    1. 访问http://www.etiantian.org和http://www.etiantian.org/ ,返回402

    说明:URL为空或者/时,匹配了location = /   ,精确匹配的优先级最高,无论放置位置如何,都将优先被匹配并执行

    2. 访问http://www.etiantian.org/index.html,  http://www.etiantian.org/abc/, 都返回401

    说明:/ 为默认匹配,如果没有匹配上其他location,最后会匹配默认匹配的部分,所以/abc没匹配上也会返回401

    3. 访问http://www.etiantian.org/documents/document.html,会返回403

    说明:此部分为路径匹配,匹配了路径/documents/

    4. 访问http://www.etiantian.org/documents/1.jpg,返回500

    说明:虽然会先匹配普通路径/documents,但是后面又匹配了正则,从而覆盖了前面的普通匹配

    5. 访问http://www.etiantian.org/images/1.gif, 返回404

    说明:首先匹配了普通路径/images, 因为/images前面有"^~"  ,所有即使1.gif匹配了正则匹配,但是也不会做检查

    高级点的用法可参考:https://www.linuxidc.com/Linux/2015-03/114982.htm

  • 相关阅读:
    第二十九课 循环链表的实现
    第二十八课 再论智能指针(下)
    第二十七课 再论智能指针(上)
    第二十六课 典型问题分析(Bugfix)
    普通new和placement new的重载
    leetcode 581. Shortest Unsorted Continuous Subarray
    leetcode 605. Can Place Flowers
    leetcode 219. Contains Duplicate II
    leetcode 283. Move Zeroes
    leetcode 217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/regit/p/9298533.html
Copyright © 2011-2022 走看看