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