1. 概述

最近基于Nginx + (Nginx + PHP7)的技术生态负载均衡,其中PHP框架使用的是ThinkPHP5,支付业务使用微信支付,其中有一处逻辑获取当前请求域名并且微信支付回调地址 thinkRequest::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. 总结

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

原文地址:https://blog.csdn.net/oschina_41731918/article/details/129092125

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_22700.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注