nginx proxy_pass路径后带/与不带/的区别

前言

nginx的代理的路径是否有时候会让你摸不着头脑?介绍nginx配置文件中proxy_pass路径后带/与不带/的区别,只有掌握了这个,才能不被nginx的代理的路径弄混乱,对于nginx的基础使用大有帮助。

问题背景

假如要将8080端口上的请求转发至3000端口。

以3000端口为例,编写proxy_pass有两种形式。

无斜杆:http://localhost:3000
有斜杆:http://localhost:3000/
假设前端请求为http://localhost:8080/get/test。

我们暂且把/get/test称为请求部分。

无斜杆

    server {
        listen 8080;
        server_name localhost;

        location /get {
            proxy_pass http://localhost:3000;
        }
        #或者
        location /get/ {
            proxy_pass http://localhost:3000;
        }
        
        #结果都是 将http://localhost:8080/get/test转发去http://localhost:3000/get/test
    }

proxy_pass:http://localhost:3000。

无斜杆location匹配到的部分也属于请求的部分。

location无论用/get还是用/get/只要匹配上之后都会将整个请求部分/get/test加到proxy_pass上。

http://localhost:3000+/get/test等于请求http://localhost:3000/get/test。

有斜杆

    server {
        listen 8080;
        server_name localhost;

        location /get {
            # 结果是 将http://localhost:8080/get/test转发去http://localhost:3000//test,出错~
            proxy_pass http://localhost:3000/;
        }
        #或者
        location /get/ {
            # 结果是 将http://localhost:8080/get/test转发去http://localhost:3000/test
            proxy_pass http://localhost:3000/;
        }
    }

proxy_pass:http://localhost:3000/。

有斜杆location匹配到的部分只用于匹配,不属于请求部分,需要在请求部分将location匹配到的部分剔除。

location用/get则是http://localhost:3000/+(/get/test -/get)等于请求http://localhost:3000//test

location用/get/则是http://localhost:3000/+(/get/test -/get/)等于请求http://localhost:3000/test

斜杠后还有字符串

    server {
        listen 8080;
        server_name localhost;

        location /get {
            # 结果是 将http://localhost:8080/get/test转发去http://localhost:3000/abc/test
            proxy_pass http://localhost:3000/abc;
        }
        #或者
        location /get/ {
            # 结果是 将http://localhost:8080/get/test转发去http://localhost:3000/abctest,出错~
            proxy_pass http://localhost:3000/abc;
        }
    }

proxy_pass:http://localhost:3000/abc。

同有斜杆的规则,在请求部分剔除location后加在上面即可。

location用/get则是http://localhost:3000/abc+(/get/test -/get)等于请求http://localhost:3000/abc/test

location用/get/则是http://localhost:3000/abc+(/get/test -/get/)等于请求http://localhost:3000/abctest

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值