Nginx的官网将proxy_pass分为两种类型:
一种是只包含IP和端口号的,比如proxy_pass http://ip:8080
,这种方式称为不带URI方式;
另一种是在端口号之后有其他路径的(包含了只有单个/
)的如proxy_pass http://ip:8080/
,以及其他路径,比如proxy_pass http://
ip:8080/abc
。也即:proxy_pass http://
ip:8080
和proxy_pass http://
ip:8080/
(多了末尾的/
)是不同的的处理方式。而proxy_pass http://
ip:8080/
和proxy_pass http://
ip:8080/abc
是相同的处理方式。
在实际使用中经常忘记搞混,在此记录备忘。
配置说明:
Nginx服务器及端口:127.0.0.1:80
代理后端服务:127.0.0.1:8080
一、只有IP和端口:
测试URL:http://127.0.0.1:80/proxy/api/test
(1)配置
location /proxy/{
proxy_pass http://127.0.0.1:8080;
}
实际地址:http://127.0.0.1:8080/proxy/api/test
(2)配置
location /proxy{
proxy_pass http://127.0.0.1:8080;
}
实际地址:http://127.0.0.1:8080/proxy/api/test
二、其他情况,端口号之后有其他路径
测试URL:http://127.0.0.1:80/proxy/api/test
(1)配置
location /proxy/{
proxy_pass http://127.0.0.1:8080/;
}
实际地址:http://127.0.0.1:8080/api/test
(2)配置
location /proxy {
proxy_pass http://127.0.0.1:8080/;
}
实际地址:http://127.0.0.1:8080//api/test
(3)配置
location /proxy/{
proxy_pass http://127.0.0.1:8080/test/;
}
实际地址:http://127.0.0.1:8080/test/api/test
(4)配置
location /proxy{
proxy_pass http://127.0.0.1:8080/test/;
}
实际地址:http://127.0.0.1:8080/test//api/test
(5)配置
location /proxy/{
proxy_pass http://127.0.0.1:8080/test;
}
实际地址:http://127.0.0.1:8080/testapi/test
(6)配置
location /proxy {
proxy_pass http://127.0.0.1:8080/test;
}
实际地址:http://127.0.0.1:8080/test/api/test