写在前面

众所周知,我们微信开发过程会遇到以下两个场景:

  • 用户扫码、点击菜单、发送消息 等,【微信】会转发到【我们在微信后台配置的域名】,实现逻辑处理,推送消息给用户 或者 做相应的逻辑处理
  • 公众号页面,需要登录获取openid,跳转的域名需要白名单。不利于本地调试

内网映射

我们可以使用一系列内网穿透映射的工具,可以在公网访问本地开放的程序,(无论是自己搭建还是使用其他产品 都适用)

如果是自己搭建或者使用付费的内网穿透工具,那么隧道域名将可以固定,我们在以下两个地方配置为获取到的内网域名,微信将会把所有请求 转发到 我们本地的这个穿透域名上,就可以实时调试了

  • 获取openid的授权域名
  • 微信公众号接管服务器域名

免费内网穿透的问题

这里在使用一些免费内网穿透产品遇到的问题,并不是所有免费内网穿透都有此问题,记录此篇文章是增加一种程序思维。解决问题的思路。

我使用的工具,分配的免费域名,会不定期变动,如第一次分配为siamA.xxxx.com 可能一个小时后会变成siamB.xxxx.com 这个时候就不适用我们上面说的这种,直接配置穿透域名在微信后台 因为需要反复修改,比较麻烦

nginx 线上域名

我这里的做法是:提前把业务以后上线的域名准备好,部署在服务器,通过转发 再转发到穿透域名。

如果内网穿透域名变化,只需要在服务器修改一次内网域名(此步骤可以通过脚本,实现自动切换 非本篇文章思路重点内容)
不需要反复去登录微信后台修改授权域名。(特别是登录微信公众号需要公司领导扫码的情况)

以下为nginx转发配置文件

location ^~ /
{
    expires 12h;
    if ($request_uri ~* "(php|jsp|cgi|asp|aspx)")
    {
         expires 0;
    }
    proxy_pass http://siamC.xxxx.com;
    proxy_set_header Host siamC.xxxx.com;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;

    #持久化连接相关配置
    #proxy_connect_timeout 30s;
    #proxy_read_timeout 86400s;
    #proxy_send_timeout 30s;
    #proxy_http_version 1.1;
    #proxy_set_header Upgrade $http_upgrade;
    #proxy_set_header Connection "upgrade";
    add_header X-Cache $upstream_cache_status;

    #Set Nginx Cache

        add_header Cache-Control no-cache;
}