# 前言
# nginx 规则分类
= 精确匹配 (优先级最高)# 只匹配根目录结尾的请求,后面不能带任何字符串 | |
^~ 精确前缀匹配 (优先级仅次于=) | |
~ 区分大小写的正则匹配 (优先级次于^~) | |
~* 不区分大小写的正则匹配 (优先级次于^~) | |
/uri 普通前缀匹配 (优先级次于正则)# 最常用 | |
/ 通用匹配 (优先级最低)# 默认匹配路径 |
# 下面是测试 location 块中 " / " 的匹配案例
前置测试访问域名:http://127.0.0.1/api/test
# location 和 proxy_pass 都不带/ ,则真实地址会带 location 匹配目录 /api/
location /api { | |
proxy_pass http://127.0.0.1:8080; | |
} |
最终访问地址: http://127.0.0.1/api/test --> http://127.0.0.1:8080/api/test
# location 带/ ,proxy_pass 不带/ ,则真实地址会带 location 匹配目录 /api/
location /api/ { | |
proxy_pass http://127.0.0.1:8080; | |
} |
最终访问地址: http://127.0.0.1/api/test --> http://127.0.0.1:8080/api/test
# location 不带/ ,proxy_pass 带/ ,则真实地址会 带/
location /api { | |
proxy_pass http://127.0.0.1:8080/; | |
} |
最终访问地址:http://127.0.0.1/api/test --> http://127.0.0.1:8080//test
# location 和 proxy_pass 都带/ ,则真实地址不带 location 匹配目录
location /api/ { | |
proxy_pass http://127.0.0.1:8080/; | |
} |
最终访问地址:http://127.0.0.1/api/test --> http://127.0.0.1:8080/test
# 同 1,location 和 proxy_pass 都不带/ ,但 proxy_pass 带地址 ,则真实地址匹配地址会替换 location 匹配目录
location /api { | |
proxy_pass http://127.0.0.1:8080/server; | |
} |
最终访问地址: http://127.0.0.1/api/test --> http://127.0.0.1:8080/server/test
# 同 2,location 带/ ,proxy_pass 不带/ ,但 proxy_pass 带地址 ,则真实地址会直接连起来
location /api/ { | |
proxy_pass http://127.0.0.1:8080/server; | |
} |
最终访问地址: http://127.0.0.1/api/test --> http://127.0.0.1:8080/servertest
# 同 2,location 不带/ ,proxy_pass 带/ ,但 proxy_pass 带地址 ,则真实地址会多个 /
location /api { | |
proxy_pass http://127.0.0.1:8080/server/; | |
} |
最终访问地址: http://127.0.0.1/api/test --> http://127.0.0.1:8080/server//test
# 同 4,location 和 proxy_pass 都带/ ,但 proxy_pass 带地址
location /api/ { | |
proxy_pass http://127.0.0.1:8080/server/; | |
} |
最终访问地址: http://127.0.0.1/api/test --> http://127.0.0.1:8080/server/test
# 总结
- proxy_pass 代理地址端口后有目录 (包括
/),则去除location匹配目录 - proxy_pass 代理地址端口后无任何,转发后地址:代理地址 + 访问 URL 目录部