去年(16年)年末,在苹果等大厂商的推动下,很多公司掀起了一股全站HTTPS化改造的热潮。58到家也做了这个工作,当时,58到家大量业务所使用的域名在jzt.58.com下,需要前将业务迁移到daojia.com域名。最后选择了域名切换与HTTPS协议升级同时执行的方案。
二、可能遇到的困难
1、涉及技术团队很多
这次改造涉及家政、丽人、速运、开放平台、支付、基础服务、架构、运维、前端FE团队、移动端(Native)、H5等团队
2、牵涉所有渠道
涉及到大量的投放渠道,包括到家App,同城App,赶集App,微信钱包,公众号,若干合作伙伴,店铺二维码……
三、方案整体思路
1、修改系统,支持双协议、双域名。http://jzt.58.com,https://jzt.daojia.com同时生效。(涉及唯一授权域的某些功能可能只能在其中一个域下生效)
2、分渠道逐步切换。比如,先切换App,再切微信钱包。
四、技术方案要点
1、统一登录系统(Passport)打通跨域登录。
用户在jzt.58.com域下登录过,切换到daojia.com域名不需要用户再次登录(少数浏览器,基于安全原因做不到) 。某些业务系统由于历史原因,Passport无法覆盖到,需要在跳转传参的环节特殊处理。
2、HTTP,HTTPS双协议兼容
1)https配在nginx
https到nginx层,nginx向http协议头中添加属性(标明访问协议是http还是https),然后将请求转发到tomcat。应用系统通过解析协议头中的属性,确定访问协议,针对不同协议,作出相应的响应。
2)图片、js等资源
资源域名改为没有协议的形式。如http://jzt.58.com/abc.jpg改为jzt.58.com/abc.jpg即可支持双协议
有些资源的连接地址通过服务返回,这类地址需要仔细梳理并修改
js文件中发起的对http协议地址的请求也需要特别处理
3、双域名并存
1)入口决定域名
没有被Passport完全覆盖的业务,如果域名与主站(首页)不一致,将丢失用户登录信息。主站需要进行一些改造,根据访问主站首页的域名,确定跳转界面的域名。
2)特殊渠道特殊处理
微信钱包等渠道,涉及授权域问题。有些功能只允许在一个域名下运行。需要保证这个渠道某一时刻只能存在一个域名发起的访问(实际切换中,微信的授权域好像有一段时间的过渡期,过渡期内两个域名都合法)
3)支付回调授权域
支付回调授权域一般有多个(3个),可以满足域名切换需求。但是,如果因为别的原因导致支付回调授权域不够用(被其他业务占用了),就需要特别处理。
4、分渠道切换
根据业务需求,一个一个渠道的切换。一般做法,先通过nginx跳转,将入口(首页)域名(域名中包括渠道参数,可以区分渠道)重定向到新的域名,等切换完成功能稳定后,再联系相关渠道修改入口域名。