【Nginx配置】proxy_pass后有"/"和无"/"探讨

1. 先看实例

  • 直接访问http://172.17.0.3:8080/nrsc/study/nginx-study,可以访问到我部署的一个项目

在这里插入图片描述

  • nginx配置,server如下
server {
        listen       9000;
        server_name  nginx-study.nrsc.com;

        #后台服务原始路径:http://172.17.0.3:8080/nrsc/study/nginx-study

        #port后无/,访问路径:http://nginx-study.nrsc.com:9000/nrsc/study/nginx-study
        location /nrsc/study { #匹配路径/nrsc/study,剩余路径/nginx-study
                proxy_pass http://172.17.0.3:8080;#此处未关闭,传递整个路径/nrsc/study/nginx-study
        }


        #port后有/,访问路径:http://nginx-study.nrsc.com:9000/yoyo/nrsc/study/nginx-study
        location /yoyo {#匹配路径/yoyo,剩余路径/nrsc/study/nginx-study
                proxy_pass http://172.17.0.3:8080/;#此处关闭,只传递/nrsc/study/nginx-study,
                								   #并不传递匹配上的/yoyo
        }

    }
  • 按照配置中注释所写的访问路径进行访问,得到的结果如下:

在这里插入图片描述
即两种nginx配置方式都成功访问到了项目.

2. proxy_pass后有"/“和无”/"的区别

2.1总结

其实区别我已经在上面的配置文件中写出来了,这里总结如下

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

则:

  • 当proxy_pass的端口号后面没有"/"时,类似于上篇文章讲到的root,用户访问到的资源为IP地址: 端口号/location匹配中的部分/ location未匹配中的部分

  • 当proxy_pass的端口号后面有"/"时,类似于上篇文章讲到的alias,用户访问到的资源为IP地址: 端口号/ location未匹配中的部分

2.2 ★★★★★五星级注意(一个大坑)★★★★★

2.1中提到的的两个假设如果变成下面的情况会是怎样???

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

  • 也许大多数人会有如下的推测
server {
        listen       9001;
        server_name  nginx-study.nrsc.com;


		#后台服务原始路径:http://172.17.0.3:8080/nrsc/study/nginx-study
		
		
		#proxy_pass末尾没有/,推测的访问路径:http://nginx-study.nrsc.com:9001/study/nginx-study
        location /study {#匹配路径/study ,剩余路径/nrsc/study/nginx-study
                proxy_pass http://172.17.0.3:8080/nrsc;#按理说末尾没有"/"即此处未关闭,
													   #会传递/study/nginx-study,则可以访问到项目
        }
		
		#proxy_pass末尾有/,推测的访问路径:http://nginx-study.nrsc.com:9001/yoyo/study/nginx-study
        location /yoyo {#匹配路径/yoyo,剩余路径/nrsc/study/nginx-study
                proxy_pass http://172.17.0.3:8080/nrsc/;#此处关闭,只传递/study/nginx-study
        }
    }
  • 直接进行验证

在这里插入图片描述
由验证结果我们可以看出,我们的推测结果并不对,真实的情况是:

nginx的proxy_pass代理的路径里究竟为

proxy_pass后面的路径/location匹配的内容/location未匹配的内容
还是为
proxy_pass后面的路径/location未匹配的内容

取决于proxy_pass中的端口号后面有没有"/"

3. 按照2.2再做一个小demo

  • 最后再做一个小demo----按照下面两种访问路径都可以正确访问到资源
server {
        listen       9002;
        server_name  nginx-study.nrsc.com;


        #后台服务原始路径:http://172.17.0.3:8080/nrsc/study/nginx-study


        #port后有/,访问路径:http://nginx-study.nrsc.com:9002/yoyo1/study/nginx-study
        location /yoyo1 {#匹配路径/yoyo1,剩余路径/nrsc/study/nginx-study
                proxy_pass http://172.17.0.3:8080/nrsc;#此处关闭,只传递/study/nginx-study
        }

        #port后有/,访问路径:http://nginx-study.nrsc.com:9002/yoyo2/study/nginx-study
        location /yoyo2 {#匹配路径/yoyo2,剩余路径/nrsc/study/nginx-study
                proxy_pass http://172.17.0.3:8080/nrsc/;#此处关闭,只传递/study/nginx-study
        }
      }
  • 验证一下

在这里插入图片描述

  • 可以看到上面两种方式都可以正确的访问到资源,也许有人已经看出来了:

第一种方式代理后的路径为
http://172.17.0.3:8080/nrsc/study/nginx-study-----与后台服务原始路径是一致的

但第二种方式代理后的路径为
http://172.17.0.3:8080/nrsc//study/nginx-study------与后台服务原始路径相比nrsc后面多了一个"/"
但是这一点关系都没有.

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值