阅读 32

Nginx - proxy_pass路径的唯一拼接规则

前言

目前Nginx主要是用作反向代理,但是最近在配置proxy_pass的时候遇到过一些问题,实验后发现多种复杂的规则背后其实本质只有一条规则

重要规律

看了一些文章后,总结的规则 如果proxy_pass后面没有任何URL路径信息(比如//xxx等),则反向代理的地址会包含location中的匹配部分,否则只会拼接匹配后的剩余路径,这是最重要且唯一的一条规则,请记住

多种情况验证

假设请求://localhost/online/wxapi/test/loginSwitch

第一种情况

proxy_pass结尾有/

location /online/wxapi/ {
        proxy_pass http://localhost:8080/;
        proxy_set_header X-Real-IP $remote_addr;
}
复制代码

代理后的实际地址:localhost:8080/test/loginSwitch

第二种情况

proxy_pass最后没有/

location /online/wxapi/ {
        proxy_pass http://localhost:8080;
        proxy_set_header X-Real-IP $remote_addr;
}
复制代码

代理后的实际地址:localhost:8080/online/wxapi/test/loginSwitch

第三种情况

proxy_pass最后有/web

location /online/wxapi/ {
        proxy_pass http://localhost:8080/web;
        proxy_set_header X-Real-IP $remote_addr;
}
复制代码

代理后的实际地址:localhost:8080/webtest/loginSwitch

注意:因为是拼接剩余部分,所以路径中可能有单个词的拼接,比如webtest

第四种情况

proxy_pass最后有/web/

location /online/wxapi/ {
        proxy_pass http://localhost:8080/web/;
        proxy_set_header X-Real-IP $remote_addr;
}
复制代码

代理后的实际地址:localhost:8080/web/test/loginSwitch

写在最后

原文引用

文章分类
后端
文章标签