nginx 代理post请求变成get请求问题

最近项目中通过nginx转发,解决请求跨域问题,配置如下:

location ~ ^/api/b.com/(.*) {

    rewrite ^/api/b.com/(.*)$ /$1 break;

    proxy_pass http://b.com;

    proxy_redirect off;

     proxy_set_header Host b.com;

     proxy_set_header X-Real-IP $remote_addr;

     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

      proxy_set_header Cookie $http_cookie;

}

假设我们从a.com 发起b.com/api/b.com请求,上面配置,会将其转发到 b.com 对应的请求路由下。测的时候,发现一直报错,问了后端同学,他说是请求类型错误。

排查过程:开始以为是代理或转发post请求配的有问题,网上了不少资料,有人说返回307,也有人说通过判断采用proxy_pass或rewrite。都没试成功。后面自己搭建了简单的本地服务器,写了简单的post请求接口。测试转发是成功的。但换回开发环境的api请求地址就出问题了。经对比推测,可能是请求协议有问题。开发环境的是https协议,如果采用http进行请求,可能造成重定向到https,这是可能就从post请求,变成了get请求,所以才报类型错误。自己搭建的简单post请求接口,由于本身就是http协议的,所以没问题。最终,问题解决了。

结论:NGINX代理转发post请求时,如果对于proxy_pass http://b.com 中的协议写错,可能造成跳转,从而使post请求变成get请求

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值