前言
目前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的结尾也不要配置/