记录一次nginx反向代理, 转发报错302 found

因为服务端A需要发送http请求去服务端C,获取数据,但公司原则不允许直接开通A和C的网络策略,只能通过公网访问C,所以从nginx所在的B与服务端C开通网络互访,然后用nginx进行转发,场景是这样。

然后我在B机器上直接用curl命令去发送http请求可以正常返回,但是用代码去请求就报错302 found。

经过查询,因为端口为非默认的80,故把设置修改proxy_set_header Host 为

location ^~ /apiname/ {
                proxy_pass http://123.123.1.1:8082/apiname/;
                proxy_set_header Host                $host:$server_port;
                proxy_set_header X-Forwarded-For     $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto   $scheme;
                proxy_set_header X-Forwarded-Port    $server_port;
                proxy_pass_header Set-Cookie;
                client_max_body_size  5120m;

        }

修改完之后依旧报错302.再经过查询,需要在302报错的时候,让nginx主动跟随302的地址,把内容取给我们,这需要进行如下设置:

server {
    ...
 
    location ^~ /apiname/ {
                proxy_pass http://123.123.1.1:8082/apiname/;
                proxy_set_header Host                $host:$server_port;
                proxy_set_header X-Forwarded-For     $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto   $scheme;
                proxy_set_header X-Forwarded-Port    $server_port;
                proxy_pass_header Set-Cookie;

                proxy_intercept_errors on;
                error_page 301 302 307 = @handle_redirects;
                client_max_body_size  5120m;

        }

 
    location @handle_redirects {
        set $saved_redirect_location '$upstream_http_location';
        proxy_pass $saved_redirect_location;
    }
}

测试有效

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值