前后端完全分离出现跨域、无法访问后台解决方案
? ? 系統為分布式,主體上分為三層,前端、服務消費端、服務提供端,前端代碼記錄后端服務器訪問地址,由于后端服務不提供外網服務,故用戶直接訪問出現無法訪問情況,但是前端服務器與后端服務器直接是互聯互通的,所以需要設置反向代理,主要步驟如下:
1、安裝httpserver服務器,目前使用的是Apache httpd服務。
安裝命令:yum -y install httpd
2、網絡不通:由于用戶訪問的是前端部分,前端服務器具備外網訪問權限,但是當前端訪問后臺接口服務時,這時候為瀏覽器直接訪問后臺消費者端。故網絡無法正常互通。
解決方案1:設置Apache服務器反向代理:將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端。(經測試設置反向代理還可避免跨域問題)
方案來自: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)修改配置文件,打開文件 ?conf/httpd.conf?,增加以下內容:
ProxyRequests Off
#代理設置
ProxyPass "/innermanage_proxy/" "http://XXX:8080/"
ProxyPassReverse "/innermanage_proxy/" "http://XXX:8080/"
<proxy? http://XXX:XX>
? AllowOverride None
? Order Deny,Allow
? Allow from all
</proxy>
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利用Apache服務器的反向代理,而方案2則使用專門的反向代理服務。由于出口IP數量限制,目前采用方案1。
總結
以上是生活随笔為你收集整理的前后端完全分离出现跨域、无法访问后台解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在内部局域网(无外网)使用阿里云短信
- 下一篇: 分布式CAP详解,为什么三个指标不可能同