场景描述
一公司的用户在前台报账时需提交发票、文档等附件,发票需经电子影像系统调用ORC识别、二维码识别、税务查验等服务。而问题在于这家公司的网络管理制度,其网络环境分为办公区、核心区两类,办公区可申请与外网交互,而核心区在此之前是完全封闭、很难申请对外通信的,我们的影像系统正建在核心区。之前尝试过两种方案,因为最近几个影像项目组都遇到这种问题,便记录于此。
实现方案
方案一:防火墙上添加白名单ip
这种方式很快被客户的网管否决,因为核心区的网络甚至不能直接通过防火墙访问外网(这只是制度问题)。我们在办公区的测试环境做过这种配置,发现影像系统的异常——所有票据几乎都要上传两次以上才可以成功调取外网识别服务,原因尚不得知,不排除环境问题。
所以若项目上的网络管理并不严苛,可以考虑这个方案。
方案二:DMZ区使用nginx转发
如图所示,影像系统的应用服务器、数据库服务器、文件服务器都部署于核心区,要与防火墙外层的AI开放平台(记为IP1)实现交互。
现在我们在DMZ区的一台转发服务器上做nginx配置:
user root;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
#以下为反向代理,如监听端口为80,proxy_pass为需要调用的API网址:
server {
listen 80 ;
location / {
proxy_pass https://api.xxxxxxx.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header User-Agent $http_user_agent;
client_max_body_size 1024m;
}
}
#以下为正向代理,如监听端口为8090,proxy_pass为核心区网络的内网地址:
server {
listen 8090 ;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header User-Agent $http_user_agent;
client_max_body_size 1024m;
}
}
}
IP2为nginx服务器的ip地址,IP3为核心区网络的外网映射。
如此,原应用服务器上应访问IP1,现在可通过访问IP2实现,而互联网中的手机APP和AI平台又通过IP3实现对影像系统的访问,办公区虽在内网,但也不能直接访问核心区,可通过IP3访问,而核心区内部的系统直接通过内网IP实现通信。