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

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:2

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

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

    

contextUrl.webp

external.webp

 

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配置方法


应用隔离原理.webp

图: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 $payvar '0';}    #移动端轻应用的访问
if ($request_uri ~* "/ierp/attachment/") {set $payvar '0';}    #放出附件下载和预览
if ($request_uri ~* "/ierp/image/") {set $payvar '0';}    #放出图片预览
#if ($request_uri ~* "/ierp/login-mobile.html") {set $payvar '0';}    #移动端登录页(正常移动端是不需要登录的)
#if ($http_referer ~* "/ierp/login-mobile.html") {set $payvar '0';}    #移动端登录页(正常移动端是不需要登录的)
if ($payvar = 1) {
    rewrite ^(.*)$ http://www.myierp.com/guide.json redirect;
 }
    proxy_pass http://next-ierp;
    .....
}

2.4 扩展场景:移动端所有应用+PC端部分应用控制访问

移动端放出所有外网访问,但同时部分应用PC端也要能访问。参考配置如下:

# 苍穹动态请求跳转到引导页面
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)/ {
#api网关功能
set $payvar '1';    #先禁用所有
if ($http_cqappid = "bos") {set $payvar '0';}    #放出bos平台应用访问
if ($http_cqappid = "") {set $payvar '0';}    #cqappid为空时允许,即放出静态资源访问
if ($http_cqappid ~* "(tra|exp)") {set $payvar '0';}    #放出tra和exp应用访问,如需放出其他应用,用|分隔开来即可
if ($http_referer ~* "/ierp/mobile.html") {set $payvar '0';}    #如果是移动端则全部访问
if ($http_user_agent ~* "Qing/") {set $payvar '0';}    #移动端轻应用的访问
if ($payvar = 1) {
    rewrite ^(.*)$ http://www.myierp.com/guide.json redirect;
}
proxy_pass http://next-ierp;
.....
}


2.5 扩展场景:移动端部分应用+PC端部分应用控制访问

移动端放出部分应用外网访问,但同时部分应用PC端也要能访问。参考配置如下:

# 苍穹动态请求跳转到引导页面
location = /guide.json {
    root html;
}
# 引导页面
location = /guide.html {
    root html;
}
# 后端请求配置
location ~(\.(do|jsp)$)|(/ierp/(kapi|kdctlres|attachment|excelpreview|kws|cbs|monitor)/)|(/ierp/?$)|(/ierp/(index\.html|mobile\.html|login\.html|login-mobile\.html)$)|(monitor)/ {
#api网关功能
set $payvar_p '1';    #先禁用所有
set $payvar_m 'a'; #先禁用所有
if ($http_cqappid = "bos") {set $payvar_p "0";set $payvar_m "b";}    #放出bos平台应用访问
if ($http_cqappid = "") {set $payvar_p "0";set $payvar_m "b";}    #cqappid为空时允许,即放出pc端静态资源访问
if ($http_cqappid ~* "(tra|exp)") {set $payvar_p "0";set $payvar_m "b";}    #放出tra和exp应用访问,如需放出其他应用,用|分隔开来即可
if ($http_referer ~* "/ierp/mobile.html") {set $payvar_m "b";}    #放出移动端访问
if ($http_user_agent ~* "Qing/") {set $payvar_m "b";}    #移动端轻应用的访问
set $payvar_a ${payvar_p}${payvar_m};  #取pc+移动端的并集
if ($payvar_a != 0b) {
    rewrite ^(.*)$ http://www.myierp.com/guide.json redirect;
}
proxy_pass http://next-ierp;
.....
}




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

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

1 需求客户需要内外网同时访问苍穹,内网需通过内网地址访问,外网使用外网地址访问。然而,集群配置中的domain地址只能填写一个,无法兼...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息