用nginx实现微信公众号相关的反向代理

将原网站(微信业务)直接通过前端代理服务器(A)反向代理到后端机器(B)上会报一个 xxxx not in whitelist hint 的错误。
因为原来白名单IP为 A服务器IP,由于业务上需要修改公众号太多,于是想不修改公众号的情况下是否也可以实现。

最后经人点拨后实现了

“要么改源码,修改api url,变成a服务器的域名
要么改dns,设置为a机器的ip
然后a服务器的nginx再反代出去”

我采用的反代方式:
A(test.com)->B(127.0.0.1)
B(修改host)->A(反向代理指向微信的api)

补充:
由于*.weixin.qq.com的域名很多,我就想能不能像泛解析那样用一个正则或通配符创建一个站点满足所有需求?答案是可以的,见配置

需要注意的是,可能你会遇到 502的问题,我遇到这个问题的时查看了站点错误日志:

搜了下解决办法,也很简单:
在nginx.conf的http 中加上:resolver 8.8.8.8; 然后reload即可。

还有backend 需要修改/etc/hosts的域名有:
x.x.x.x api.weixin.qq.com
x.x.x.x file.api.weixin.qq.com
x.x.x.x mp.weixin.qq.com
x.x.x.x open.weixin.qq.com
x.x.x.x open.work.weixin.qq.com
x.x.x.x demo.open.weixin.qq.com
x.x.x.x qyapi.weixin.qq.com
#x.x.x.x pay.weixin.qq.com
#x.x.x.x api.mch.weixin.qq.com
#x.x.x.x fraud.mch.weixin.qq.com


继续补充:
在后来的使用中发现用微信企业打款时要报“证书错误”,经过各种排查摸索(尝试更换证书、修改spbill_create_ip 的IP、不使用nginx获取真实ip 都不行),最后尝试直接从B机去访问 api.mch.weixin.qq.com ,居然可以(企业打款中白名单中包含B机的IP)。当然这算哪门子事,如果不反向代理微信,随着增加后端机器,那么IP白名单也就要增加,又要修改各公众号的设置,解决不了根本的问题。(由于开通企业打款的客户就几家,暂时不管了)

发表回复

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部