当前位置:

正文

1、location 含义

location 有”定位”的意思, 根据Uri来进行不同的定位.

2、location 语法

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

# 很少用到
location @name { ... }

(1)三种匹配模式:

// 精准匹配
location = uri { }

// 一般匹配
location uri { }

// 正则匹配
location ~ uri { }

(2)参数具体说明如下;

=  :精确匹配(必须全部相等)
~  :正则匹配,大小写敏感
~* :正则匹配,忽略大小写
^~ :只需匹配uri部分,要求一旦匹配到,立即处理,不再去匹配其他的正则 uri
@  :内部服务跳转

特殊注意:

^~ 也是支持浏览器编码过的 URI 的匹配, 如 /html/%20/data 可以成功匹配 /html/ /data

3、location 匹配demo

(1)= 精确匹配

location = / {
    #规则
}
# 则匹配到  http://www.example.com/  这种请求。

(2)~ 正则匹配,大小写敏感

 location ~ /Example/ {
     #规则
 }
#请求示例
#http://www.example.com/Example/  [成功]
#http://www.example.com/example/  [失败]

(3)~* 正则匹配,忽略大小写

location ~* /Example/ {
    #规则
}
# 则会忽略 uri 部分的大小写
#http://www.example.com/Example/  [成功]
#http://www.example.com/example/  [成功]

(4)^~ 只需匹配uri部分

location ^~ /img/ {
    #规则
}
#以 /img/ 开头的请求,都会匹配上
#http://www.example.com/img/a.jpg   [成功]
#http://www.example.com/img/b.mp4 [成功]

(5)@ nginx内部跳转

location /img/ {
    error_page 404 @img_err;
}

location @img_err {
     # 规则
}
#以 /img/ 开头的请求,如果链接的状态为 404。则会匹配到 @img_err 这条规则上。

4、location 查找顺序及优先级

当有多条 location 规则时,nginx 有一套比较复杂的规则,优先级如下:

精确匹配 =
前缀匹配 ^~(立刻停止后续的正则搜索)
按文件中顺序的正则匹配 ~或~*
匹配不带任何修饰的前缀匹配。

总结如下:

先精确匹配,没有则查找带有 ^~的前缀匹配,没有则进行正则匹配,最后才返回前缀匹配的结果(如果有的话)

5、location 常用案例

# 图片、js、css的缓存配置
location ~* .(gif|jpg|jpeg|png|css|js|ico)$ {
    expires 7d;
}

# 匹配 .php 结尾的请求
location ~ .php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass php_upstream;
    #fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
标签: nginx
创作不易,感谢您对作者的支持!~( ̄▽ ̄)~
文章评论
评论列表 (有 0 条评论)
还没有评论,来说两句吧......