nginx location的配置

来源:互联网 发布:万科金域名城怎么样 编辑:程序博客网 时间:2024/05/22 10:25
  1. 基本原则:

    1. 首先匹配确定的前缀,采用最长匹配原则,记下最长匹配的前缀
    2. 如果最长匹配前缀带有* ^~*, 则直接使用最长匹配前缀,不会进行正则表达式匹配,否则继续第3步。
    3. 在匹配正则表达式,按照正则表达式出现的顺序进行匹配
    4. 一旦找到一个匹配的正则表达式,则正则表达式搜索停止,并且使用该表达式
    5. 如果找不到则使用最长匹配前缀
  2. 符号规则:

    1. = 表示完全匹配,如果匹配到则停止搜索
    2. ~ 后接大小写敏感的正则表达式
    3. ~* 后面接大小写不敏感的正则表达式
    4. @ 前缀定义的路径并不是用来处理常规请求,而是用于重定向,不能有嵌套
  3. 例子
    现有以下location配置:

location = / {    [configuration A]}location / {    [configuration B]}location /documents/ {    [configuration C]}location ^~ /images/ {    [configuration D]}location ~* \.(gif|jpg|jpeg)$ {    [configuration E]}

有以下几个请求:
a. “/”
b. “/index.html”
c. “/documents/1.jpg”
d. “/images/1.gif”
e. “/documents/document.html”

匹配结果如下:
a 按照=规则, 配置 A 满足匹配条件,于是匹配A,停止搜索

b 最长匹配前缀为 “/” , 找不到满足匹配的正则表达式,所以使用最长匹配前缀, 匹配 B , 不匹配A的原因是 = 是要求完全匹配的,不满足条件

c 最长匹配前缀为”/documents/”,但可以找到匹配的正则表达式 E, 故最终匹配为E

d 最长匹配前缀为”/images/”, 由于 D 有前缀 “^~”,按照上面写的基本规则2,表示直接使用最长匹配前缀,所以这里匹配D

e 最长匹配前缀为”/documents/” , 找不到符合的正则表达式, 所以匹配C

参考:

https://nginx.org/en/docs/http/ngx_http_core_module.html#location