location匹配参数
location有两种匹配规则:
- 匹配URL类型,有四种参数可选,也可以不带参数。location [ = | ~ | ~* | ^~ ] uri { … }
- 命名location,用@标识,类似于定于goto语句块。location @name { … }
- 不加任何规则,默认大小写敏感,前缀匹配.
location /index/ {
......
}
#http://abc.com/index [匹配成功]
#http://abc.com/index/index.page [匹配成功]
#http://abc.com/test/index [匹配失败]
#http://abc.com/Index [匹配失败]
# 匹配到所有uri
=
: 精确匹配
location = /abc/ {
.....
}
# 只匹配http://abc.com/abc
#http://abc.com/abc [匹配成功]
#http://abc.com/abc/index [匹配失败]
~
: 正则匹配,区分大小写
location ~ /Abc/ {
.....
}
#http://abc.com/Abc/ [匹配成功]
#http://abc.com/abc/ [匹配失败]
~*
: 正则匹配,忽略大小写
location ~* /Abc/ {
.....
}
# 则会忽略 uri 部分的大小写
#http://abc.com/Abc/ [匹配成功]
#http://abc.com/abc/ [匹配成功]
^~
: 非正则匹配。uri以某个常规字符串开头,不支持正则。
location ^~ /index/ {
.....
}
#以 /index/ 开头的请求,都会匹配上
#http://abc.com/index/index.page [匹配成功]
#http://abc.com/error/error.page [匹配失败]
@
: nginx内部跳转
location /index/ {
error_page 404 @index_error;
}
location @index_error {
.....
}
#以 /index/ 开头的请求,如果链接的状态为 404。则会匹配到 @index_error 这条规则上。
例:
# 此例用NGINX做反向代理。外网请求转发到内部局域网。
# URI地址包含 password, login等关键词时,响应 403
location ~ .*(index\.jsp|config|password|login).* {
return 403;
}
# 使用等号=,精确匹配URI
location = /ask/vision/ {
return 403;
}
location = /ask/vision {
return 403;
}
location /css {
proxy_pass http://127.0.0.1:8888/vision/css/;
}
location /js {
proxy_pass http://127.0.0.1:8888/vision/js/;
}
location /ask/ {
proxy_pass http://127.0.0.1:8888/;
proxy_cookie_path / /ask;
}
location / {
proxy_pass http://127.0.0.1:8888/;
}
https://zhuanlan.zhihu.com/p/137042956