Nginx 中 proxy_pass 的斜杠问题

server {
    listen       80;
    server_name  localhost;

    location /api1/ {
       proxy_pass http://localhost:8080;
    }
    
    # http://localhost/api1/xxx -> http://localhost:8080/api1/xxx


    location /api2/ {
       proxy_pass http://localhost:8080/;
    }
    
    # http://localhost/api2/xxx -> http://localhost:8080/xxx


    location /api3 {
        proxy_pass http://localhost:8080;
    }
    
    # http://localhost/api3/xxx -> http://localhost:8080/api3/xxx


    location /api4 {
        proxy_pass http://localhost:8080/;
    }
    
    # http://localhost/api4/xxx -> http://localhost:8080//xxx,请注意这里的双斜线,好好分析一下。


    location /api5/ {
        proxy_pass http://localhost:8080/haha;
    }
    
    # http://localhost/api5/xxx -> http://localhost:8080/hahaxxx,请注意这里的haha和xxx之间没有斜杠,分析一下原因。

    location /api6/ {
        proxy_pass http://localhost:8080/haha/;
    }
    
    # http://localhost/api6/xxx -> http://localhost:8080/haha/xxx

    location /api7 {
        proxy_pass http://localhost:8080/haha;
    }
    
    # http://localhost/api7/xxx -> http://localhost:8080/haha/xxx

    location /api8 {
        proxy_pass http://localhost:8080/haha/;
    }
    
    # http://localhost/api8/xxx -> http://localhost:8080/haha//xxx,请注意这里的双斜杠。
}

在 nginx 中配置 proxy_pass 时,当在后面的url加上了 /,相当于是绝对根路径,则 nginx 不会把 location 中匹配的路径部分代理走;

如果没有 /,则会把匹配的路径部分也给代理走;

参考链接:https://www.jianshu.com/p/c751250a5112

艺无止境,诚惶诚恐, 感谢开源贡献者的努力!!
原文地址:https://www.cnblogs.com/d0usr/p/12487335.html