zoukankan      html  css  js  c++  java
  • Nginx location

    location 作用

    location 指令的作用是根据用户请求的 URI(路径) 来匹配不同的配置。其实就是根据用户请求的网站地址 URL 进行匹配,匹配成功即进行相关的操作。


    location 语法

    location 使用的语法为:

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

    语法各部分含义:

    location [ = | ~ | ~* | ^~ | @ ] URI { ... }
    指令 匹配标识 匹配的网站网址 匹配URI后要执行的配置段

    每个匹配标识的作用:

    匹配标识 作用
    ~* 正则匹配,不区分大小写
    ~ 正则匹配,区分大小写
    ^~ 优先匹配常规字符串,不使用正则匹配
    = 精确匹配,比如,如果请求“/”出现频繁,定义“location = /”可以提高这些请求的处理速度
    @ 定义命名路径,用在请求重定向中

    location 示例

    location = / {                         
        [ configuration A ]                # 当用户请求 http://www.abc.com/ 时执行配置A     
    }
    location / {
        [ configuration B ]                # 当用户请求 http://www.abc.com/ 时执行配置B
    }
    location /documents {
        [ configuration C ]                # 当用户请求 http://www.abc.com/documents/document.html 时执行配置C
    }
    location ^~ /images/ {
        [ configuration D ]                # 当用户请求 http://www.abc.com/images/1.gif 时执行配置D
    }
    location ~* .(gif|jpg|jpeg)$ {
        [ configuration E ]                # 当用户请求 http://www.abc.com/documents/1.jpg 时执行配置E
    }
    

    location 匹配实战

    虚拟主机配置:

    server {
        listen       80;
        server_name  www.abc.com abc.com;
        root    html/www;
    
        location / {                           # " / " 表示所有 location 都不能匹配后才匹配这个
            return 401;                        # 当用户请求 http://www.abc.com/index.html 时返回 401
        }
    
        location = / {                         # " = / " 表示精确匹配
            return 402;                        # 当用户请求 http://www.abc.com/ 时返回 402
        }
    
        location /documents/ {                 # " /documents/ " 表示匹配常规字符,如果有正则,则优先匹配正则
            return 403;                        # 当用户请求 http://www.abc.com/documents/document.html 时返回 403
        }
    
        location ^~ /images/ {                 # " ^~ /images/ " 表示匹配常规字符串,不做正则匹配检查
            return 404;                        # 当用户请求 http://www.abc.com/images/1.gif 时返回 404
        }
    
        location ~* .(gif|jpg|jpeg)$ {        # " ~* .(gif|jpg|jpeg)$ " 表示正则匹配
            return 500;                        # 当用户请求 http://www.abc.com/documents/1.jpg 时返回 500
        }
    }
    

    实验结果:

    curl -s -o /dev/null -I -w "%{http_code}
    " http://www.abc.com/index.html
    401
    curl -s -o /dev/null -I -w "%{http_code}
    " http://www.abc.com/
    402
    curl -s -o /dev/null -I -w "%{http_code}
    " http://www.abc.com/documents/document.html
    403
    curl -s -o /dev/null -I -w "%{http_code}
    " http://www.abc.com/images/1.gif
    404
    curl -s -o /dev/null -I -w "%{http_code}
    " http://www.abc.com/documents/1.jpg
    500
    

    通过以上多个 location 的匹配可以看出匹配的优先顺序。


    参考资料

    http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_core_module.html#location

  • 相关阅读:
    [转]C++中const、volatile、mutable的用法
    [转]pugixml使用教程
    [转]xml解析工具的效率比较QDomDocument、TinyXml-2、RapidXml、PugiXml
    [原][spark]帧序列的纹理UV索引,修改spark源码,改变纹理索引方式,支持常规帧序列
    [原][unreal][UE][spark]分析unreal engine 虚幻引擎的粒子编辑器:Cascade
    [转][C++]佛祖保佑,永无bug。C++ BUG解决方案
    [转]VS中的路径宏 OutDir、ProjectDir、SolutionDir各种路径含义
    [转]jsbsim基础概念
    [原][粒子特效][spark]调节器modifier
    项目管理(八)- 控制项目的范围
  • 原文地址:https://www.cnblogs.com/wushuaishuai/p/9359561.html
Copyright © 2011-2022 走看看