nginx proxy_pass后的url加和不加反斜杠‘/’的区别

nginx 代理配置完之后, nginx 配置proxy_pass,需要注意转发的路径配置问题.
在 nginx 中配置 proxy_pass 时,当在后面的url加上了'/',相当于是绝对根路径,则 nginx 不会把 location 中匹配的路径部分代理走;如果没有'/',则会把匹配的路径部分也给代理走。

proxy_pass 配置说明

不带反斜杠'/'

1
2
3
4
5
6
7
8
9
10
11
12
location /test/
{
proxy_pass http://localhost:8080;
}

```nginx
### 带反斜杠`'/'`
``` nginx
location /test/
{
proxy_pass http://localhost:8080/; # 相比之前的配置, 这里 url 后面加了反斜杠
}

上面两种配置,区别只在于proxy_pass转发的路径后是否带'/'.

针对情况1,如果访问url = http://server/test/index.php,则被nginx代理后,请求路径会便问http://proxy_pass/test/index.php,将test/作为根路径,请求test/路径下的资源.

针对情况2,如果访问url = http://server/test/index.php,则被nginx代理后,请求路径会变为http://proxy_pass/index.php,直接访问server的根资源.

proxy_pass 配置实例

第一种、 url带斜杠

1
2
3
location /proxy/ {
proxy_pass http://127.0.0.1/;
}

访问地址http://server/proxy/test.html代理到URL:http://127.0.0.1/test.html

第二种(相对于第一种,最后少一个 ‘/’ )

1
2
3
location /proxy/ {
proxy_pass http://127.0.0.1;
}

访问地址http://server/proxy/test.html代理到URL:http://127.0.0.1/proxy/test.html

第三种

1
2
3
location /proxy/ {
proxy_pass http://127.0.0.1/aaa/;
}

访问地址http://server/proxy/test.html代理到URL:http://127.0.0.1/aaa/test.html

第四种(相对于第三种,最后少一个 ‘/’ )

1
2
3
location /proxy/ {
proxy_pass http://127.0.0.1/aaa;
}

访问地址http://server/proxy/test.html代理到URL:http://127.0.0.1/aaatest.html