可以从 nginx-playground 的报错看见真实的本地请求路径
1
2
| location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
|
设置依赖的请求 URI
尾部有 /
表示目录 否则表示文件 获取失败可能会导致重定向
地址可以被定义为 前缀字符串(prefix string) 或者 正则表达式(regular expression)
~*
大小写无关正则匹配 (case-insensitive)~
大小写相关正则匹配 (case-sensitive)
标准匹配
- `` (无符号)前缀匹配
=
指定匹配^~
一般匹配路径
匹配逻辑
- 首先检查前缀串
- 然后检查正则项
root
会将匹配到路径拼接到根下
1
2
3
4
| location /i/ {
root /data/w3;
# root /data/w3/; # <-- 这俩一样
}
|
/i/top.gif
会请求本地资源 /data/w3/i/top.gif
alias
定义了匹配路径的替换项 如果匹配路径与最后一级实际路径相同 建议使用 root
1
2
3
| location /i/ {
alias /data/w3/images/;
}
|
/i/top.gif
会请求 /data/w3/images/top.gif
注意最后的分隔符 alias /data/w3/images;
会匹配到 /data/w3/imagestop.gif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| location /prefix {
proxy_pass http://localhost:8080;
}
location /path/ {
proxy_pass http://localhost:8081;
}
location /part {
proxy_pass http://localhost:8082/;
}
location /part {
proxy_pass http://localhost:8082/part; # <-- 类似于 alias
}
location /middle/ {
proxy_pass http://localhost:8083/;
}
location /name {
proxy_pass http://127.0.0.1:8084$request_uri;
}
|
在匹配时 路径与文件是有差异的
1
2
3
4
5
6
| [0]: /prefix/a/s.xml -> http://127.0.0.1:8080/prefix/a/s.xml
[1]: /path/a/s.xml -> http://127.0.0.1:8081/path/a/s.xml
[2]: /part/a/s.xml -> http://127.0.0.1:8082//a/s.xml
[3]: /part/a/s.xml -> http://127.0.0.1:8082/part/a/s.xml
[4]: /middle/a/s.xml -> http://127.0.0.1:8083/a/s.xml
[5]: /name/a/s.xml -> http://127.0.0.1:8084/name/a/s.xml
|
在写 proxy_pass
指令时 当 proxy uri 不带路径时 会将整个请求路径添加到转发请求中
此外的话 其行为类似于 alias
将匹配剩余部分拼接到转发地址中
1
2
3
4
5
6
| location /prefix { proxy_pass http://localhost:8080/a; }
/prefix/a/s.xml -> :8080/a/a/s.xml
接取匹配后剩余内容 /a/s.xml 拼接到 :8080/a 之后
location /middle/ { proxy_pass http://localhost:8083/a/; }
/middle/a/s.xml -> :8083/a/a/s.xml
|