以下面这段配置为例,阐述一下nginx路径匹配的几项规则。
server {
listen 80;
server_name localhost;
location / {
}
location /abc {
proxy_pass http://localhost:8888/abc/api/
}
location /abc/ {
}
}
- location后面的路径只能从端口后面的路径开始匹配。以上面的配置为例,对于http://localhost:8888/api/abc,location /abc无法匹配, 但是/api可以;如果想要匹配上/abc, 则/abc必须出现在端口之后且是第一级路径。
- proxy_pass后面的链接带不带 / 是有区别的。
- 带 / 表示会把匹配到的路径(比如上面配置中的/abc)之后的部分删掉, 例如proxy_pass http://localhost:8888/abc/api/,经过转换之后则会变为:http://localhost:8888/abc/
- 不带 / ,则不会把后面的路径替换,例如proxy_pass http://localhost:8888/abc/api,经过转换之后依然为:http://localhost:8888/abc/api
- location后面的路径带不带 / 也有区别: /abc可以匹配/api/或者/api/xxx或者/apiadd/之类, 但是/api/只能精准匹配URL中紧跟端口之后的/api/。