nginx 注意事项

nginx使用花括号{}判断区块,所以当正则中包含花括号时,则必须用双引号将正则包起来
location是nginx用来处理对同一个server不同的请求地址使用独立的配置的方式
举例:
location = / {
    #只匹配“/”
    ... 配置A
}

location / {
     #匹配任何请求,因为所有请求都是以“/”开始
     #但更长字符匹配或正则表达式匹配会优先匹配
    ...配置B
}

location ^~ /images/ {
    #匹配任何以/images/开始的请求,并停止匹配其他location
    ...配置C
}

location ~* .(gif|jpg|jpeg)$ {
    #匹配以gif,jpg,jpeg结尾的请求,但是所有/images/目录的请求由C处理
    ...配置D
}
访问 / 会使用配置A
访问 /documents/document.html 会使用配置B
访问 /images/1.gif 会使用配置C
访问 /documents/1.jpg 会使用配置D

sever区块中如果有包含rewrite规则,则会最先执行,而且只会执行一次, 然后再判断命中哪个location的配置,再去执行该location中的rewrite, 当该location中的rewrite执行完毕时,rewrite并不会停止,而是根据rewrite过的URL再次判断location并执行其中的 配置. 那么,这里就存在一个问题,如果rewrite写的不正确的话,是会在location区块间造成无限循环的.所以nginx才会加一个最多重试10次的 上限

locatoin并非像rewrite那样逐条执行,而是有着匹配优先级的,当一条请求同时满足几个location的匹配时,其只会选择其一的配置执行.
其寻找的方法为:
    1. 首先寻找所有的常量匹配,如location /, location /av/, 以相对路径自左向右匹配,匹配长度最高的会被使用,
    2. 然后按照配置文件中出现的顺序依次测试正则表达式,如 location ~ download\/$, location ~* \.wtf, 第一个匹配会被使用
    3. 如果没有匹配的正则,则使用之前的常量匹配

而下面几种方法当匹配时会立即终止其他location的尝试
    1. = 完全匹配,location = /download/
    2. ^~ 终止正则测试,如location ^~ /download/ 如果这条是最长匹配,则终止正则测试,这个符号只能匹配常量
    3. 在没有=或者^~的情况下,如果常量完全匹配,也会立即终止测试,比如请求为 /download/ 会完全命中location /download/而不继续其他的正则测试
总结:
    1. 如果完全匹配(不管有没有=),尝试会立即终止
    2. 以最长匹配测试各个常量,如果常量匹配并有 ^~, 尝试会终止
    3. 按在配置文件中出现的顺序测试各个正则表达式
    4. 如果第3步有命中,则使用其匹配location,否则使用第2步的location
另外还可以定义一种特殊的named location,以@开头,如location @thisissparta 不过这种location定义不用于一般的处理,而是专门用于try_file, error_page的处理,这里不再深入.
 用前文的例子来看看

location  = / {
  ....配置A
}
 
location  / {
  ....配置B
}
 
location ^~ /images/ {
  ....配置C
}
 
location ~* \.(gif|jpg|jpeg)$ {
  ....配置D
}

访问 / 会使用配置A -> 完全命中
访问 /documents/document.html 会使用配置B -> 匹配常量B,不匹配正则C和D,所以用B
访问 /images/1.gif 会使用配置C -> 匹配常量B,匹配正则C,使用首个命中的正则,所以用C
访问 /documents/1.jpg 会使用配置D -> 匹配常量B,不匹配正则C,匹配正则D,使用首个命中的正则,所以用D

last和break最大的不同在于

- break是终止当前location的rewrite检测,而且不再进行location匹配
- last是终止当前location的rewrite检测,但会继续重试location匹配并处理区块中的rewrite规则


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27181165/viewspace-776955/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27181165/viewspace-776955/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值