1.Location 前缀含义
匹配符号 | 匹配规则 | 匹配优先级 |
---|---|---|
= | 精确匹配 | 1 |
^~ | 以某个字符串开头 | 2 |
~ | 区分大小写的正则匹配 | 3 |
~* | 不区分大小写的正则 | 4 |
!~ | 区分大小写不匹配的正则 | 5 |
!~* | 不区分大小写不匹配的正则 | 6 |
/ | 通用匹配,匹配所有请求 | 7 |
2.案例展示
(1)匹配符 = (精确匹配 )
location = / { … } 与 location / { … }
* 前一个是精确匹配,只响应/请求,所有/xxx或/xxx/xxxx类的请求都不会以前缀的形式匹配到它
* 后一个是只要以 / 为前缀的请求都会被匹配到。如:/abc , /test/abc, /test/abc/aaaa
(2)匹配符 ^~(以某个字符串开头 )
location ^~ /api/test {}
意思是关闭正则匹配,当搜索到这个普通匹配模式后,将不再继续搜索正则匹配模式。
(3)匹配符 ~ (区分大小写的正则匹配)
location ~ /hello.+.html$ {
}
(4)匹配符 ~*(不区分大小写的正则)
location ~* /hello {
}
(5)匹配符 !~(区分大小写不匹配的正则)
location !~ /hello {
}
(6)匹配符 !~*(不区分大小写不匹配的正则)
location !~* /hello {
}
(7)匹配符 / (通用匹配,匹配所有请求)
location /api/test {}
location /api/test/t001 {} // 优先匹配该配置
正则表达式学习地址:
https://c.runoob.com/front-end/854
3.实际案例
http {
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
# deny all; 拒绝请求,返回403
# allow all; 允许请求
}
location /abc {
deny all;
}
location ~ /.+\.jsp$ {
proxy_pass http://location:9090;
}
# 匹配所有/test路径下的jsp文件
location ~ /test/.+\.jsp$ {
proxy_pass http://localhost:8080;
}
# 定义各类错误页
error_page 404 /404.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# @类似于变量定义
# error_page 403 http://blog.youkuaiyun.com; #这种定义不允许,需求利用@定义临时变量来实现
error_page 403 @page403;
location @page403 {
proxy_pass http://blog.youkuaiyun.com;
}
}
}