nginx中proxy_pass末尾带斜杠/和不带的区别

目录

nginx中proxy_pass末尾带斜杠/和不带的区别:

如果proxy_pass末尾有斜杠/,proxy_pass不拼接location的路径,也就是说会把location的部分 去掉后剩下的拼接到proxy_pass url后面 如果proxy_pass末尾无斜杠/,proxy_pass会直接拼接location的路径

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

请求地址:http://localhost/publish/test —>转发地址:http://127.0.0.1:8000/publish/test 这个好理解。不做改变,直接 拼接到location的路径

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

请求地址:http://localhost/publish/test —>转发地址:http://127.0.0.1:8000/test 会把location的部分(/publish/)这个 去掉后剩下的拼接到proxy_pass url后面

如果是这样的呢? proxy_pass包含路径,且末尾有斜杠

1
2
3
location  /publish/ {
    proxy_pass http://127.0.0.1:8000/user/;
}

请求地址:http://localhost/publish/test —>转发地址:http://127.0.0.1:8000/user/test

如果是这样的呢 ?proxy_pass包含路径,末尾无斜杠

1
2
3
location  /publish/ {
    proxy_pass http://127.0.0.1:8000/user;
}

请求地址:http://localhost/publish/test —>转发地址:http://127.0.0.1:8000/usertest

再次总结: 如果proxy_pass末尾有斜杠/,proxy_pass不拼接location的路径,也就是说会把location的部分 去掉后剩下的拼接到proxy_pass url后面 如果proxy_pass末尾无斜杠/,proxy_pass会直接拼接location的路径

还有一点 nginx的proxy_pass 后面带不带/ 跟后端服务器有关系: 如果你的后端服务器需要接收到带有 /publish 前缀的请求, 那么应该使用 proxy_pass http://127.0.0.1:8000/; 如果你的后端服务器不需要接收到带有 /publish 前缀的请求,那么应该使用 proxy_pass http://127.0.0.1:8000;

同样的,如果你的location 中 /publish 后面需要加/ 那么应该使用 location /publish/ { … },反之使用 location /publish { … }

总之,在这个例子中,如果你的后端服务器需要接收到带有 /publish 前缀的请求,那么应该使用 location /publish/ 和 proxy_pass http://127.0.0.1:8000/; 反之使用 location /publish 和 proxy_pass http://127.0.0.1:8000;

location /publish { … } 与 location /publish/ { … } 的区别在于它们匹配的 URL。前者只会匹配 /publish 开头的 URL,而后者会匹配以 /publish/ 结尾的 URL。 proxy_pass http://127.0.0.1:8000; 与 proxy_pass http://127.0.0.1:8000/; 的区别在于它们向后端服务器发送的请求的 URL。前者会将请求的 URL 中的 /publish 前缀去掉,而后者会将请求的 URL 中的 /publish 前缀保留

随机文章