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 |
除此之外,还可以自定义/计算请求透往下游透传。文章来源:https://www.toymoban.com/news/detail-822299.html
3. 总结
针对于支付等核心业务场景,不建议动态获取域名的方式设置回调地址。可以通过配置文件中写固定值,这样就不会因为部署架构的调整而导致重大业务事故。另外,部署架构的调整,不要直接在生产环境替换,而是部署一套镜像环境,把核心流程测试通过之后,再将小部分流量切换过去验证,最终没问题之后再整体切换。文章来源地址https://www.toymoban.com/news/detail-822299.html
到了这里,关于Nginx负载均衡代理proxy_set_header设置和透传https协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!