zoukankan      html  css  js  c++  java
  • Nginx小记之location

    Syntax: location [ = | ~ | ~* | ^~ ] uri {...}
    location @name {...}
    Default: -
    Context: server, location

    location匹配是针对一个标准化后的URI进行的,标准化可能有如下几种操作:

    • 解码 “@xx” 这种格式的uri
    • 解析带有由 . 和 .. 组成的相对路径,解析成绝对路径
    • 如果 merge_slashes 指令没有被关闭(默认是开启),则自动将两个相邻的斜杠合并成一个斜杠( //test –> /test )

    一个location可以是前缀匹配字符串,也可以是正则表达式。正则表达式由 ~* 和 ~ 修饰,前者不匹配大小写,后者匹配大小写。为请求找到一个匹配的location,nginx首先会检查所有的前缀匹配字符串,被最大长度匹配到的location将会被选中和保存。接下来会检查正则表达式location,按照它们出现在配置文件中的顺序依次检查,直到匹配到第一个满足条件的location,结束检查。如果一个都没有匹配上,那么上一个被保存的location会被使用。
    location块可以嵌套。
    如果一个最长前缀匹配字符串拥有 ^~ 修饰符,则正则表达式不会被检查,同样地, = 修饰符被用来做精确匹配。如果一个location被精确匹配到了,则结束匹配。比如说,如果 “/“ 这个请求经常发生,那么定义一个 ”location = /“ 可以加快处理请求的速度。

    针对上面的语法,我们来举几个例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    location = / {
    [ configuration A ]
    }

    location / {
    [ configuration B ]
    }

    location /documents/ {
    [ configuration C ]
    }

    location ^~ /images/ {
    [ configuration D ]
    }

    location ~* .(gif|jpg|jpeg)$ {
    [ configuration E ]
    }

    请求“/”会匹配配置A,请求“/index.html”会匹配配置B,请求“/document/document.html”会匹配配置C,请求“/images/1.gif”会匹配配置D,请求“/documents/1.jpg”会匹配配置E

    一个带有@前缀的location,不是用来做普通的请求处理的,而是用来做重定向。他们不能嵌套,不能包含嵌套的location块。

    如果一个location由一个斜杠结尾,那么这个请求会被以下其中一个程序处理: proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass, grpc_pass。如果一个URI匹配上了这个location,但是末尾没有斜杠,那么一个永久重定向(301)会被返回,重定向的地址就是原URI再加一个斜杠。如果这不是你所期望的,你可以这样:

    1
    2
    3
    4
    5
    6
    7
    location /user/ {
    proxy_pass http://user.example.com;
    }

    location = /user {
    proxy_pass http://login.example.com;
    }
  • 相关阅读:
    访问的站点提示输入用户名密码
    ASP.NET Session 过期问题
    c#和VB代码转化网址
    整理 css 小技巧
    asp.net当修改header时提示:The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>)
    sql server 2005 replication 设置
    动态加载CSS和Javascript文件 javascript 和asp.net.
    一台机子上安装两个版本的mysql
    sql删除所有表外键和表
    Griview中的删除按钮添加“确认提示”
  • 原文地址:https://www.cnblogs.com/guochongbin/p/10601745.html
Copyright © 2011-2022 走看看