# V8移动端外网访问,PC端只能内网访问解决方案
# V8移动端外网访问,PC端只能内网访问解决方案
方案1: 两个域名,两个nginx,pc域名节点到内网nginx,外网域名解析到外网nginx 优点:不会相互影响;缺点:两个域名客户配置复杂,要同时维护两个域名,两个nginx
方案2: 1个域名,两个nginx 内网解析到内网nginx,外网解析到外网nginx 优点:同一个域名客户配置方便;缺点:需要内外网两个dns, 在刚访问完外网后,立马切换成内网,而且内网也有外网访问权限的时候,会有dns解析缓存,导致内网依然访问外网被拦截
方案3: 1个域名,1个nginx, 内外网同时解析到同一个nginx, 通过规则判断内外网拦截 优点:不需要多个域名,多个nginx;缺点:要做规则判断,要维护更复杂的规则
域名问题:域名解析无论是两个域名两个nginx,还是一个域名解析到两个nginx,都需要客户来配置,一个域名解析两个nignx,需要智能dns,或者内外网配置两个dns
三方集成内外网问题:参考链接【基础能力】外网三方系统打开v8平台后,无法正常使用在线预览编辑功能 https://open.seeyoncloud.com/#/faq/faq/v1/share?url=Z2JySmU+NjE0OQ== 【集成】pc端使用内网访问,移动端需要使用外网或者其他代理访问,怎么分别设置pc和移动端的返回在线文档地址? https://open.seeyoncloud.com/#/faq/faq/v1/share?url=Z2JySmU+NDQzMw== wps基本配置与常见问题 https://open.seeyoncloud.com/#/faq/faq/v1/share?url=Z2JySmU+OjE1OQ==
三方集成内外网问题指导人:潘峰
nginx配置指导人:刘俊
# 两个nginx操作步骤
- 说明:只有内外网区分,移动端没有具体的要求规则
- 内网nginx配置不变
- 外网nginx配置:
add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,X-XSRF-TOKEN,Cookie,Set-Cookie,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
if ($request_method = 'OPTIONS') {
return 200;
}
#只需要添加login 403就可以了,这样外网 pc端就没法登录了,其他全放开,移动端也会用到pc端的静态页和接口
if ($request_uri ~ (/login/)) {
return 403
}
location ~ /service/ {
# 一个nginx操作步骤
- 说明:由于只有一个nginx,就需要通过来源IP判断内外网,移动端无特殊要求情况下
add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,X-XSRF-TOKEN,Cookie,Set-Cookie,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
if ($request_method = 'OPTIONS') {
return 200;
}
#需要根据IP判断内网网,一般内网IP网段都比较固定,选择内网IP来判断
set $flag 0;
if ($remote_addr !~ "10\.28\..*\..*") {
set $flag ${flag}1;
}
if ($request_uri ~ (/login/)) {
set $flag ${flag}2;
}
location ~ /service/ {
if ($bkflag = "012") {
return 403;
}
.....
}
location ~ ^/(?!(?:service|openapi|ctp-user\/sso)/)([^/]+) {
if ($bkflag = "012") {
return 403;
}
.....
}
# 特殊需求nginx配置
- 特殊需求说明:例如客户只需要移动端访问概览页,不允许访问详情页
- 特殊需求操作办法:这个要根据实际url来添加规则,先把外网nginx配置好,让现场实施或者客户模拟真实的场景,然后根据nginx日志,来实际添加需要开放的url
add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,X-XSRF-TOKEN,Cookie,Set-Cookie,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
if ($request_method = 'OPTIONS') {
return 200;
}
set $bkflag 0;
set $flag 0;
if ($request_uri !~ (m5-init|static|m5-mobile|icon|ctp-affair-mobile|ctp-user-mobile|organization-mobile|login-mobile|oauth|main-mobile|remoteEntry.js|libs|portal-mobile|portal|zhbg7746227937647345847-mobile|zhbg7746227937647345847|child-frame|ctp-application|bpm|edoc335172694483814428-mobile|edoc335172694483814428|dynamic.*|.*-mobile|app-common|organization|ctp-affair|ctp-user|cip-manager|service|custom-index-header|announcement1492794990099121396|app-common)) {
set $flag ${flag}2;
}
if ($request_uri !~ (m5|ctp-affair|ctp-user|organization|ctp-message|app-approval|app-common|portal|zhbg7746227937647345847|ctp-application|bpm|edoc335172694483814428|dynamic.*|.*-mobile|cip-manager|service|custom-index-header|announcement1492794990099121396|app-common|sfrestapitransfer|0oHMljneDQ.txt|sfrestapitransfer|zhilianopoartpp|custom-extensions|zhiduxinwenguanlicopy128293610609004236-mobile|zhiduxinwenguanlicopy128293610609004236)) {
set $bkflag ${bkflag}2;
}
if ($request_uri ~ (MobileDetail)) {
set $bkflag ${bkflag}2;
}
if ( $request_uri ~ (main/portal)) {
set $flag ${flag}2;
}
location ~ /service/ {
if ($bkflag = "02") {
return 403;
}
.....
}
location ~ ^/(?!(?:service|openapi|ctp-user\/sso)/)([^/]+) {
if ($flag = "02") {
return 403;
}
.....
}
# 返回403 错误页
- 返回错误页说明:很多客户可能会认为直接返回403报错,特别不友好,可以定制化错误页,返回特定的错位页
if ($request_method = 'OPTIONS') {
return 200;
}
# 关键修改:定义403错误页面
error_page 403 /return403.html;
location = /return403.html {
root /data/nginx/html; # 静态文件目录
internal; # 禁止外部直接访问
# 设置正确的Content-Type和字符集
default_type text/html;
charset utf-8;
}
location ~ /service/ {
#配置如果拒绝,不直接返回403,返回定制化错误页
if ($flag = "02") {
# return 403;
rewrite ^ /return403.html last;
access_log logs/return403.log main;
}
.....
}
编撰人:liujun