前后端完全分离出现跨域、无法访问后台解决方案

    系统为分布式,主体上分为三层,前端、服务消费端、服务提供端,前端代码记录后端服务器访问地址,由于后端服务不提供外网服务,故用户直接访问出现无法访问情况,但是前端服务器与后端服务器直接是互联互通的,所以需要设置反向代理,主要步骤如下:

1、安装httpserver服务器,目前使用的是Apache httpd服务。

安装命令:yum -y install httpd

2、网络不通:由于用户访问的是前端部分,前端服务器具备外网访问权限,但是当前端访问后台接口服务时,这时候为浏览器直接访问后台消费者端。故网络无法正常互通。

解决方案1:设置Apache服务器反向代理:将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。(经测试设置反向代理还可避免跨域问题)

前后端完全分离出现跨域、无法访问后台解决方案_第1张图片

方案来自:http://www.cnblogs.com/skyfeng/articles/6628903.html

改造步骤:

1首先确保Apache有这些模块,在Apache根目录下确认有这些模块,主要包含以下模块:

      mod_proxy.so

    mod_proxy_ajp.so

    mod_proxy_balancer.so

    mod_proxy_connect.so

    mod_proxy_http.so

 打开配置conf/httpd.conf文件,将这些模块的注释去除,如下图所示:

前后端完全分离出现跨域、无法访问后台解决方案_第2张图片

2)修改配置文件,打开文件  conf/httpd.conf ,增加以下内容:

ProxyRequests Off

#代理设置

ProxyPass "/innermanage_proxy/" "http://XXX:8080/"

ProxyPassReverse "/innermanage_proxy/" "http://XXX:8080/"

  AllowOverride None

  Order Deny,Allow

  Allow from all

3)在工程中修改前端代码

将访问后台服务地址改为:"/innermanage_proxy/";

注意:此时的地址应与conf/httpd中保持一致。

在设置完成后,日志中若出现:

Permission denied: AH00957: HTTP: attempt to connect to XXX:8080 (XXX) failed错误提示,则使用以下命令修改:

/usr/sbin/setsebool httpd_can_network_connect 1

/usr/sbin/setsebool -P httpd_can_network_connect 1 (使其永久生效)

解决方案2:使用nginx反向代理服务器,使用代理服务器进行访问后端接口。该方法代码改动量小,但是需要增加出口IP,且安装nginx在无外网的环境下比较困难。

主要步骤:

  1. 安装nginx-1.14.2。
  2. 修改nginx配置文件,如图:

前后端完全分离出现跨域、无法访问后台解决方案_第3张图片

  1. 修改前端访问后台路径配置为:配置文件中server中监听的端口与Ip

两个方案都测试成功,方案1利用Apache服务器的反向代理,而方案2则使用专门的反向代理服务。由于出口IP数量限制,目前采用方案1

你可能感兴趣的:(反向代理)