Nginx反向代理时有无“/”,区别很大哦

124 阅读2分钟

场景一: 利用根目录进行代理

location / {
    proxy_pass http://example.test.com/;
}
location / {
    proxy_pass http://example.test.com;
}

这两个配置实现的效果是一样的。

场景二: 下面四种情况分别用http://192.168.1.10/proxy/test.html 进行访问。

第一种情况:
location  /proxy/ {
          proxy_pass http://127.0.0.1:8080/;
}

实现效果:当访问http://192.168.1.10/proxy/test.html时,会被代理到http://127.0.0.1:8080/test.html 这个url,并将结果返回给我们。

第二种情况:(相对于第一种,最后少一个 /)
location  /proxy/ {
          proxy_pass http://127.0.0.1:8080;
}

实现效果:当访问http://192.168.1.10/proxy/test.html时,会被代理到http://127.0.0.1:8080/proxy/test.html 这个url,并将结果返回给我们。

第三种情况:
location  /proxy/ {
          proxy_pass http://127.0.0.1:8080/real/;
}

实现效果:当访问http://192.168.1.10/proxy/test.html时,会被代理到http://127.0.0.1:8080/real/test.html 这个url,并将结果返回给我们。

第四种情况(相对于第三种,最后少一个 / ):
location  /proxy/ {
          proxy_pass http://127.0.0.1:8080/real;
}

实现效果:当访问http://192.168.1.10/proxy/test.html时,会被代理到http://127.0.0.1:81/realtest.html 这个url,并将结果返回给我们。

假设1:
①一个访问路径(URL)端口号后面的路经可以分为两部分: location匹配中的部分 + location未匹配中的部分

②proxy_pass的路径也可以分为两部分IP地址 + 端口号

则:
当proxy_pass的端口号后面没有"/"时,用户访问到的资源为IP地址: 端口号/location匹配中的部分/location未匹配中的部分

当proxy_pass的端口号后面有"/"时,用户访问到的资源为IP地址: 端口号/location未匹配中的部分

假设2:
①一个访问路径(URL)端口号后面的路经可以分为两部分: location匹配中的部分 + location未匹配中的部分

②proxy_pass的路径若为三部分:IP地址 + 端口号+ contex路径

则: proxy_pass里面定义了context路径,路径后面没有"/"时,用户访问到的资源为IP地址:端口号/context路径location未匹配中的部分,没有 / 地址路径就是直接拼接的(http://127.0.0.1/ssswx/custom/getTitleList

proxy_pass里面定义了context路径,路径后面有"/"时,用户访问到的资源为为ip地址:端口号/contex路径/location未匹配的内容, 有 / 地址路径就有(http://127.0.0.1/sss/wx/custom/getTitleList