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请求

 

 

 

你可能感兴趣的:(nginx)