Nginx负载均衡代理proxy_set_header设置和透传https协议

在Nginx+PHP7的环境中处理负载均衡时,遇到微信支付回调地址因协议变化导致的问题。文章详细介绍了如何通过proxy_set_header指令在Nginx配置中将HTTPS协议透传至后端服务器,确保支付回调的正确性。建议在核心业务中避免动态获取域名,而应固定回调地址,并在架构调整时先在镜像环境测试,再逐步切换流量。
摘要由CSDN通过智能技术生成

1. 概述

最近基于Nginx + (Nginx + PHP7)的技术生态做负载均衡,其中PHP框架使用的是ThinkPHP5,支付业务中使用了微信支付,其中有一处逻辑:获取当前请求的域名并且微信支付的回调地址 \think\Request::instance()->domain(),本来小程序端访问的是https协议,做了负载均衡之后,在程序中获取到的http协议,这样导致微信支付一直无法正确回调,导致订单状态未改变。所以要Nginx负载均衡配置处,将协议透传。查了网上很多文章,大多都是透传请求ip而已,没有涉及协议,故而在本文进行汇总。

2. proxy_set_header指令

2.1 作用说明

重新定义或者添加请求头发往后端服务器。

2.2 语法

2.2.1 规则

proxy_set_header field value;

2.2.2 上下文

http, server, location

2.2.3 默认值

其中$类变量是Nginx中的请求会话可获取的变量
proxy_set_header Host $proxy_host;

proxy_set_header Connection close;

2.3 常见选项说明

选项说明
Host$proxy_host服务器的对外提供的域名/主机地址
X-Forwarded-For$proxy_add_x_forwarded_for用于识别通过HTTP代理或负载平衡器原始IP
X-Real-IP$remote_addr客户端IP
X-Forwarded-Proto$scheme将负载均衡的https协议透传到后端
X-Real-Port$remote_port客户端或上一级端口
User-Agent$http_user_agent客户端的UA

除此之外,还可以自定义/计算请求透往下游透传。

3. 总结

针对于支付等核心业务场景,不建议动态获取域名的方式设置回调地址。可以通过配置文件中写固定值,这样就不会因为部署架构的调整而导致重大业务事故。另外,部署架构的调整,不要直接在生产环境替换,而是部署一套镜像环境,把核心流程测试通过之后,再将小部分流量切换过去验证,最终没问题之后再整体切换。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值