使用nginx代理,支持微信网页授权不同域名

本文介绍了如何使用nginx代理解决微信网页授权时的跨域问题。首先理解微信OAuth流程,然后通过创建中间件改写请求,最后调整nginx配置进行代理设置,处理400错误,成功实现代理并传递访问IP给后端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

承认有点标题党了。这次开发一个项目遇到问题,以前有两个微信老项目基于 yaf,域名为 m.baidu.com(做示例),然后网页授权域名填的是 m.baidu.com,而这次新开发的项目是基于 laravel,那么域名为 wechat.baidu.com,但是网页授权域名怎么办,这就坑爹了。当然了,大部分人不会遇到这么蛋疼的事情吧。

前提

laravel5.5

php7.1.0

nginx1.10

overtrue/laravel-wechat

了解微信OAuth

这个过程必须要明白

感谢超神的图片

从流程我们可以看到,回调url域名其实就是我们的网页授权域名。那么既然这样我们是不是可以造个假呢,
在域名为wechat.baidu.com的项目下,我们也把网页授权域名写成m.baidu.com,然后再使用nginx做代理,基于location 转发到wechat.baidu.com下;

改写overtrue/laravel-wechat中间件

为什么要改写这个中间件呢,因为中间件默认会直接获取你的域名,所以如果我使用 wechat.baidu.com,那么默认就会回调后跳转到 wechat.baidu.com,而实际上我要跳转到 m.baidu.com

Middleware文件夹下新建一个中间件OAuthAuthenticate,并且

### 微信公众号域名配置数量解决方案 当面对微信公众号域名授权数量有限的情况时,可以采用域名中转的方法来解决这个问题。具体来说,通过设置一个中间服务器作为代理,所有的请求先发送到这个中间服务器,再由该服务器转发至目标域名。这种方法不仅能够绕过直接绑定多个域名的限制,还能增强系统的灵活性和安全性[^1]。 对于希望在微信公众号内使用外部资源(如阿里云OSS图床),但由于微信公众平台仅允许特定域名访问而导致的问题,同样可以通过上述提到的域名中转方案加以克服。即,在中间服务器上处理对外部资源的请求并返回给微信端口,从而间接实现了对非官方许可域外资源的有效利用[^2]。 为了实现这一功能,通常会选择具备良好性能和支持高并发特性的Web服务器软件来进行部署,比如Nginx就是一个不错的选择。下面是一个简单的Nginx配置实例用于说明如何搭建这样的反向代理服务: ```nginx server { listen 80; server_name your_proxy_domain.com; location / { proxy_pass http://target_domain_or_ip/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Proto $scheme; } } ``` 此段代码展示了如何创建一个监听于指定端口号的服务,并将其接收到的所有HTTP请求重定向到另一个地址上去。这正是构建域名中转所需的核心逻辑之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值