nginx配置proxy_pass中url末尾带/与不带/的区别详解

下面是关于nginx配置proxy_pass中url末尾带/与不带/的区别的详细攻略:

下面是关于nginx配置proxy_pass中url末尾带/与不带/的区别的详细攻略:

1.问题背景

在nginx配置代理(proxy_pass)时,url末尾带/与不带/有什么区别?在哪种情况下该使用哪种方式呢?本篇攻略将针对这一问题做详细的解答。

2.区别详解

2.1 url末尾带/

当使用url末尾带/的方式,如下所示:

location /abc/ {
    proxy_pass http://localhost:8080/;
}

代表将请求的url /abc/ 转发到http://localhost:8080/,即nginx会将请求的url /abc/ 替换成 http://localhost:8080/abc/ 进行转发。这种方式适用于请求资源的根目录为 /abc/ 的情况,例如:/abc/index.html。

2.2 url末尾不带/

当使用url末尾不带/的方式,如下所示:

location /abc {
    proxy_pass http://localhost:8080;
}

代表将请求的url /abc 转发到http://localhost:8080,即nginx会将请求的url /abc 原封不动地转发到http://localhost:8080。这种方式适用于请求资源的根目录为 /abc 的情况,例如:/abc/style.css。

3.示例说明

3.1 url末尾带/

3.1.1 配置示例:

location /dist/ {
    proxy_pass http://localhost:3000/;
}

3.1.2 示例说明:

上述配置示例表示将请求的url /dist/ 转发到http://localhost:3000/,即nginx会将请求的url /dist/ 替换成 http://localhost:3000/dist/ 进行转发。这种方式适用于请求资源的根目录为 /dist/ 的情况,例如:/dist/index.html。

3.2 url末尾不带/

3.2.1 配置示例:

location /static {
    proxy_pass http://localhost:3000;
}

3.2.2 示例说明:

上述配置示例表示将请求的url /static 原封不动地转发到http://localhost:3000。这种方式适用于请求资源的根目录为 /static 的情况,例如:/static/style.css。

4.总结

url末尾带/与不带/的区别在于是否将原始请求的uri替换为后端服务器的uri。url末尾带/适用于访问资源的根目录为/abc/的情况,url末尾不带/适用于访问资源的根目录为/abc的情况。在配置代理时,应根据具体情况来选择url末尾带/或不带/的方式。

本文标题为:nginx配置proxy_pass中url末尾带/与不带/的区别详解

基础教程推荐