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

531 阅读1分钟

前言

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

重要规律

看了一些文章后,总结的规则

多种情况验证

假设请求:http://localhost:6060/get/login

第一种情况

proxy_pass结尾有/

34     server {

 35         listen 6060;

 36         server_name localhost;

 37         location /get/ {

 38                 proxy_pass http://localhost:9090/test;

 39 

 40         }

 41     }

代理后的实际地址: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,注意,这个时候,location的配置也必须有/结尾,不然到时候配置的就是localhost:8080/web//test/loginSwitch,匹配就会有问题,反正这块匹配我是没有搞懂,乱的不行,个人是这么觉得,如果proxy_pass的结尾配置了/,则location的结尾也最好配置/,如果proxy_pass的结尾没有/,则location的结尾也不要配置/

写在最后

原文引用 原文引用