金蝶云·苍穹内外网访问部署方案

1 需求
客户需要内外网同时访问苍穹,内网需通过内网地址访问,外网使用外网地址访问。然而,集群配置中的domain地址只能填写一个,无法兼顾上述两种不同的地址访问苍穹(clientDomain方案除外)
1.1 场景一:内外网-访问隔离
实现内外网访问,对于访问的苍穹的应用不区分内外网
1.2 场景二:内外网-应用访问隔离
实现内外网应用访问访问,对于访问的苍穹应用内外网有区分,控制外网只能访问特定苍穹应用
1.3 场景三:内外网-PC移动端访问隔离
实现内外网PC与移动端访问隔离,对于访问的苍穹应用内外网有区分,控制外网只能移动端访问,而PC只能在内网访问。
针对上述三种场景,制定如下解决方案,这些解决方案都需要内外网配置相同的域名
1、外网ip配置域名(购买域名解析公网入口IP)
2、内网ip配置相同的域名(内网域名服务器解析内网入口IP)
2 解决方案
2.1 场景一:内外网-访问隔离
2.1.1 方案描述
通过内外网配置相同域名,如下图示例

2.1.2 操作步骤
(1)外网IP配置域名
需客户购买域名,用于苍穹访问,绑定外部访问的反向代理服务地址
(2)内网IP配置域名
配置内部域名服务器,将访问苍穹域名解析成内网nginx的地址(需自备域名服务器)
(3)配置
MC的集群管理中,配置项domain.contextUrl与imageServer.external.url中的ip为该域名,保存后发布zk


2.2 场景一:内外网-应用访问隔离
2.1.1 方案描述
通过内外网配置相同域名,并通过api网关或nginx实现需要对外放开的功能应用(appid)访问,如下图示例

2.2.2 操作步骤
(1)外网IP配置域名
需客户购买域名,用于苍穹访问,绑定外部访问的反向代理服务地址
(2)内网IP配置域名
配置内部域名服务器,将访问苍穹域名解析成内网nginx的地址(需自备域名服务器)
(3)配置
MC的集群管理中,配置项domain.contextUrl与imageServer.external.url中的ip为该域名,保存后发布zk
(4)外网Nginx配置方法

图:Nginx实现苍穹应用级内外网隔离示意图
Nginx实现苍穹应用级内外网隔离原理是通过获取header中cqappid的值进行判断重定向,配置段参考如下:
location = /guide.json {
root html; #引导页面放置nginx/html/目录下
}
location = /guide.html {
root html; #引导页面放置nginx/html/目录下
}
location ~(/ierp/.*\.(do|jsp)$)|(/ierp/(kapi|kdctlres|attachment|excelpreview|kws|cbs|monitor)/)|(/ierp/?$)|(/ierp/(index\.html|mobile\.html|login\.html|login-mobile\.html)$)|(monitor)/ {
#苍穹应用隔离
set $payvar 1; #先禁用所有
if ($http_cqappid = "bos") {set $payvar '0';} #放出bos平台应用访问
if ($http_cqappid = "") {set $payvar '0';} #cqappid为空时允许,即放出静态资源
if ($http_cqappid ~* "(tra|exp|er)") {set $payvar '0';} #放出tra、exp、er应用访问
# 禁用卡片功能(比如放出bos范围太大了,需要再细化限制)
if ($request_uri ~* "f=bos_base_apphome") {set $payvar '1';} #禁用系统服务云的基础服务
if ($request_uri ~* "f=sys_apphome_grid") {set $payvar '1';} #禁用系统服务云的系统管理
if ($request_uri ~* "f=cts_apphome_grid") {set $payvar '1';} #禁用系统服务云的配置工具
if ($request_uri ~* "f=ais_apphome") {set $payvar '1';} #禁用系统服务云的智能搜索
if ($request_uri ~* "f=pc_devportal_main") {set $payvar '1';} #禁用开发服务云的开发平台
if ($request_uri ~* "f=open_apphome_grid") {set $payvar '1';} #禁用开发服务云的开放平台
if ($request_uri ~* "f=unit_apphome_grid") {set $payvar '1';} #禁用开发服务云的测试平台
if ($payvar = 1) {
rewrite ^(.*)$ http://www.myierp.com/guide.json redirect; #重定向到苍穹要调用的json接口,改接口内容返回重定向的引导页面
}
pass_pass http://next-ierp;
……
}重定向的guide.json文件内容如下:(再由guide.html定义自己的引导页面即可)
{
"RedirectURL":"http://www.myierp.com/guide.html"
}自定义guide.html引导页面内容如下:
<!DOCTYPE html> <html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <head> <title>金蝶云苍穹</title> </head> <body> <h1> Access denied </h1> <p>抱歉!您所在的网络环境没有权限打开此应用,请联系管理员。 <p>Sorry! Your network environment doesn't have permission to open this application. Please contact the administrator. <p><div style="color:#777777;font-size:10px"> Kingdee/api-gateway</div> </body> </html>
2.3 场景三:内外网-PC与移动端访问隔离
2.3.1 方案描述
通过内外网配置相同域名,拦截外网PC端访问的浏览器标识以及登录页面login-mobile.html、login.html,如下图示例

2.3.2 操作步骤
(1)外网IP配置域名
需客户购买域名,用于苍穹访问,绑定外部访问的反向代理服务地址
(2)内网IP配置域名
配置内部域名服务器,将访问苍穹域名解析成内网nginx的地址(需自备域名服务器)
(3)配置
MC的集群管理中,配置项domain.contextUrl与imageServer.external.url中的ip为该域名,保存后发布zk
(4)外网Nginx配置方法,参考配置如下:
# 苍穹动态请求跳转到引导页面
location = /guide.json {
root html;
}
# 引导页面
location = /guide.html {
root html;
}
# 后端请求配置
location ~(/ierp/.*\.(do|jsp)$)|(/ierp/(kapi|kdctlres|attachment|excelpreview|kws|cbs|monitor)/)|(/ierp/?$)|(/ierp/(index\.html|mobile\.html|login\.html|login-mobile\.html)$)|(monitor)/ {
#pc和移动端隔离
set $payvar '1'; #先禁用所有
if ($request_uri ~* "/ierp/mobile.html") {set $payvar '0';} #放出移动端的访问
if ($http_referer ~* "/ierp/mobile.html") {set $payvar '0';} #放出移动端的访问
if ($http_user_agent ~* "Qing/") {set $payv金蝶云·苍穹内外网访问部署方案
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



