|
|
51CTO旗下网站
|
|
移动端

怎样让小程序服务器免备案

我们知道,小程序服务器的域名必须备案。然而,扫码签到工具的服务器在国外,没有备案,也没法备案。小程序服务器不备案,我们是怎么做到的呢?答案就是代理。

作者:Frank来源:码农的人生|2018-05-08 10:04

我们知道,小程序服务器的域名必须备案。然而,扫码签到工具的服务器在国外,没有备案,也没法备案。

小程序服务器不备案,我们是怎么做到的呢?答案就是代理。

下面对背景和解决方案逐一详细说明。

背景:

我们有境外的虚拟服务器,有域名,但域名没有备案(鉴于服务器在国外,没法通过备案)。

服务端使用的是Laravel框架。

网上提到了新浪的云应用解决方案。我们申请了php的服务器和一个二级域名,10元/月。这个二级域所在的一级域名已经备案,可以通过小程序的服务器域名校验。

当决定把服务器搬到新浪的服务器时,才发现新浪的php服务器不支持Laravel框架。

解决方案:

怎么办呢?

既然小程序和后端服务器之间的交互比较简单,都是通过Request交互(除了JSON格式的request,就是downloadImage),为什么不试试把新浪服务器作为一个代理,让它作为前端小程序和后端服务器之间的桥梁呢?

思路如下图所示:

怎样实现代理呢?

把所有的Request按照类型分类,让新浪服务器处理各种类型的Requeset。在当前案例中,我们使用了get、post、put、getDownImg这些类型(说明:getDownImg虽然是get请求,不过它返回的类型是二进制数据,不是JSON格式,所以和get分开处理),因此,在新浪服务器上创建get.php、post.php、put.php、getDownImg.php分别处理各自对应类型的request。

每个代理的内部实现是怎样的呢?

先看看小程序服务器处理的request。以get为例,request的格式如下:

https://webserver/path?param1=value1&param2=value2

其中webserver表示服务器的地址,path表示API的名称,param1和param2分别是两个参数,value1和value2对应各自的参数值。

也就是说在第2步中,新浪服务器转发request到小程序服务器的格式应该如上所示。

为了保证通用性,新浪服务器接收到的request(第1步中的request),我们把path放到参数里,如下:

https://sinawebserver/get.php?method=path&param1=value1&param2=value2

然后从参数里提取出method的值,作为path转发(第2步中的request)到小程序服务器,这就是get.php做的事情。

当然,需要注意的是,既然我们在代理中使用了method这个参数,所以在小程序的服务器提供的API中,我们应该避免method参数,否则在get.php在处理请求的时候会引起冲突。

同样,回到小程序,发送请求的方式就稍微有点不一样了。

在使用代理之前,request的样例可能如下:

  1. wx.request({ 
  2.   url: 'https://webserver/path'
  3.   data: { 
  4.      x: '' , 
  5.      y: '' 
  6.   }, 
  7.   header: { 
  8.    'content-type''application/json' 
  9.   }, 
  10.   success: function(res) { 
  11.   } 
  12. }) 

使用代理之后,它就变成了如下:

  1. wx.request({ 
  2.   url: 'https://sinawebserver/'
  3.   data: { 
  4.     method: 'path' 
  5.      x: '' , 
  6.      y: '' 
  7.   }, 
  8.   header: { 
  9.     'content-type''application/json' 
  10.   }, 
  11.   success: function(res) { 
  12.   } 
  13. }) 

至于response,第3步中的response,通过新浪代理服务器,原封不动地返回给小程序就可以了,无需任何变动。

按照这种方法,我们写出其他几种类型的request代理,如post.php、put.php、getDownImg.php。

大功告成,我们的境外服务器可以为小程序提供服务了。

最后,还得说明,在这个方案中,我们增加了一个代理层,以致让系统的request反应链变长了,增加了系统的响应时间,也增加了潜在的不稳定性。

个人看法:如果有条件,不怕麻烦,还是建议申请国内的服务器,备案域名。

最后,附上新浪服务器作为代理服务器的php源代码,供大家参考。

https://github.com/franczx/sina_proxy_4_wechat

【编辑推荐】

  1. 深入浅出:Tomcat应用服务器实现中的设计模式应用浅析
  2. Windows 服务器下勒索木马的防护与对抗
  3. 曙光发布全球首款搭载寒武纪MLU100的云端服务器,先进计算阵营再添新军
  4. Apache服务器总是被攻击 来看看如何保护Apache Web服务器
  5. 3个小技巧教你搭建简单的云存储NAS服务器
【责任编辑:武晓燕 TEL:(010)68476606】


点赞 0
分享:
大家都在看
猜你喜欢
24H热文
一周话题
本月最赞

视频课程+更多

热门职位+更多

读 书 +更多

计算机病毒分析与防治简明教程

本书全面翔实地介绍了各种病毒的原理,以操作系统的发展为主线,结合病毒的发展过程来综合分析病毒。在分析工具上,较多地利用了脚本语言、...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊