关于内网外域名不统一,移动端访问外网域名客户端访问内网域名的部署方案原创
金蝶云社区-tjsunxiu
tjsunxiu
2人赞赏了该文章 93次浏览 未经作者许可,禁止转载编辑于2024年07月05日 14:50:59

相关知识点:clientDomain、nginx配置、domainurl,msg_domain,云之家流程中心


    最近为客户部署苍穹星瀚私有云环境,遇到客户内网外域名不统一的情况,客户不允许修改成同一个域名,咨询了总部几位方案老师,都表述我们不支持域名不统一情况下的数据流转。但是从原理上看,应该是可以实现的。

    论坛上查找了很多方案,都实现了一部分功能,中间测试经历很多曲折,尤其是系统上线后才发现,云之家审批消息网页端跳转会登录失败的问题,一路困难重重。在联系了总部和云之家的很多老师后,大家群策群力,最终成功实现跨域名访问的方案,现在将方案给大家共享,希望可以给遇到类似问题的同事提供一些帮助。感谢总部叶鑫老师、张远平老师、周庆岩老师、胡海洋老师、吴家麒老师、唐涛老师、云之家的黄庆国老师的大力支持。


背景介绍:星瀚私有云部署,云之家公有云部署。客户要求:1、外网不允许直接访问;2、用户本地访问云之家浏览器端,单点登录到星瀚系统,此时域名为内网域名A;3、手机端云之家,访问系统进行审批和移动单据提交,此时使用外网域名,通过DMZ-NGINX服务器进行域名转发,将访问的需求传递到内网苍穹服务器上。

需求:出于某种原因,内外网域名不能一致。

架构:云之家手机端---》外网域名--》dmz nginx VIP--》内网ng VIP--》苍穹星瀚

参考文献:1、《金蝶云·苍穹内外网访问部署方案》

https://developer.kingdee.com/article/255988029918299904?productLineId=29&isKnowledge=2&lang=zh-CN

2、《金蝶云·苍穹多地址访问》

https://developer.kingdee.com/article/255989539918071552?productLineId=29&isKnowledge=2&lang=zh-CN

3、《苍穹内外网同租户环境使用不同域名,渠道支持多域名问题》

https://developer.kingdee.com/article/403550078281067264?productLineId=29&isKnowledge=2&lang=zh-CN

——————————————————————————————————


问题一:外网域名登录跳转以后,外网地址和domainurl不一致,无法正常访问。


一般我们在访问星瀚的时候,会校验登录状态,如果没有登入状态,会返回一个302,如https://kdcloud.net/ierp/login.html?redirect=https%3A%2F%2Fkdcloud.net%2Fierp%2F

这个返回的地址就是MC配置的domain.contextUrl。


当我们外网访问时,这个domain传递的数据发生域名转换不正常,无法正常访问。

解决方案:修改domain域名--》内网域名;DMZ的NG上配置clientDomain进行传递domain网址信息到后端,如:

proxy_set_header clientDomain https://kdcloud外.net/ierp/;


原理可以看一下参考文档《金蝶云·苍穹多地址访问》,里面有详细介绍。


问题二:手机端云之家可以访问,内网访问显示内网地址,不允许通过外网域名直接访问,内网云之家网页端访问一律转换为内网地址


这个实现比较容易,可以参考另外两个文献,通过nginx跳转的方式,和移动端过滤的方式在dmz服务器上做转发配置就可以实现。


问题三:内网发出的审批信息,入参地址是内网地址;外网发出的审批,入参地址是外网地址。


这个问题,参考《苍穹内外网同租户环境使用不同域名,渠道支持多域名问题》,通过配置wf_confcenter的msg.domain

就可以解决,实测有效。

需要注意的一点是,系统里流程实例显示的入参信息是不准确的,替换完发给云之家之后,流程实例入参的信息没变,但是云之家的地址已经变了。

这里有两点需要注意,一、只有选择“消息”,修改的内容才会生效;二、不知道是不是缓存的问题,还是其他的原因,修改这个参数以后,当时不会立刻生效,前后大概有半个小时左右,期间我修改多次均不生效,包括重启服务重启容器等等,过段时间才生效的。三、这个字段目前只修改云之家“已办待办”的域名地址,对于“我发起的流程”并不生效,在云之家属于不同的两个字段。(该问题已解决,详情见后文问题五。版本6.0.1无法修改,需要升级到6.0.9

image.png



问题四、内网访问云之家审批,无法正常登录,原用户被不断重复踢出。


这个问题卡了很久,原则上云之家发ticket给苍穹进行验证,验证通过存在浏览器cookie里。反复测试后发现,浏览器验证的时候可能是调用了login.html(这个地址,在内网NG的conf.d文件夹下ierp.conf有转发),用proxy_pass的话,会把云之家发送的外网地址完整的携带到浏览器,地址转成内网地址后会形成跨域登陆的情况,造成登陆失败。此时,改用rewrite,或者return 301,直接把地址转换成内网地址,触发登陆的域名信息就是内网地址了,不会再出现之前这个问题可以直接登陆了。实测有效。


配置建议:

遵循以上原理,实现的方法有很多,比如可以在http块配置一个map,将client_domain作为变量赋值,内外校验后,在location块传值即可,类似的方法有很多。也可以用if实现各种分发,大家可以自己来决定。如果可以的话,最好还是跟客户协商统一域名吧。

http {

        ……

    map $payvar $client_domain {

   '0'  https://kdcloudtestfe.bohailife.net/ierp/;

   '1'  http://kdcloudtest.bohailife.net/ierp/;

    }

 location / {

#pc和移动端隔离

set $payvar '1';    #先禁用所有

if ($request_uri ~* "/ierp/mobile.html") {set $payvar '0';}    #放出移动端的访问

……

# 根据$payvar的值进行不同的代理设置

proxy_set_header clientDomain  $client_domain;

}


问题五:云之家我发起的流程(6.0.9版本修复

云之家消息中心里,除了“已办待办”,还有“我发起的流程”。通常修改msg.domain以后,待办会修改网址,但是“我的流程”不会,实测该问题在6.0.9版本里已经修复,详情参考《苍穹内外网同租户环境使用不同域名,渠道支持多域名问题》中,方法二,在msg_tools中修改渠道配置信息即可image.png

image.png



结语:至此问题完美解决,感谢总部各位老师的大力支持。经过实测,通过NGINX进行地址转换后,确实可以实现内外网不同域名以及移动端客户端的隔离;但是相比之下,这种方案远没有同域名的方案稳定和简单。如果可以的话,最好还是内外网域名统一并通过内外网dns做不同的转发,可以跳过99%的内外网访问和云之家移动审批问题。


以上,感谢。

赞 2