前后端完全分离出现跨域、无法访问后台解决方案
? ? 系統(tǒng)為分布式,主體上分為三層,前端、服務(wù)消費(fèi)端、服務(wù)提供端,前端代碼記錄后端服務(wù)器訪問(wèn)地址,由于后端服務(wù)不提供外網(wǎng)服務(wù),故用戶直接訪問(wèn)出現(xiàn)無(wú)法訪問(wèn)情況,但是前端服務(wù)器與后端服務(wù)器直接是互聯(lián)互通的,所以需要設(shè)置反向代理,主要步驟如下:
1、安裝httpserver服務(wù)器,目前使用的是Apache httpd服務(wù)。
安裝命令:yum -y install httpd
2、網(wǎng)絡(luò)不通:由于用戶訪問(wèn)的是前端部分,前端服務(wù)器具備外網(wǎng)訪問(wèn)權(quán)限,但是當(dāng)前端訪問(wèn)后臺(tái)接口服務(wù)時(shí),這時(shí)候?yàn)闉g覽器直接訪問(wèn)后臺(tái)消費(fèi)者端。故網(wǎng)絡(luò)無(wú)法正常互通。
解決方案1:設(shè)置Apache服務(wù)器反向代理:將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端。(經(jīng)測(cè)試設(shè)置反向代理還可避免跨域問(wèn)題)
方案來(lái)自:http://www.cnblogs.com/skyfeng/articles/6628903.html
改造步驟:
1)首先確保Apache有這些模塊,在Apache根目錄下確認(rèn)有這些模塊,主要包含以下模塊:
? ?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?,增加以下內(nèi)容:
ProxyRequests Off
#代理設(shè)置
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)在工程中修改前端代碼
將訪問(wèn)后臺(tái)服務(wù)地址改為:"/innermanage_proxy/";
注意:此時(shí)的地址應(yīng)與conf/httpd中保持一致。
在設(shè)置完成后,日志中若出現(xiàn):
Permission denied: AH00957: HTTP: attempt to connect to XXX:8080 (XXX) failed錯(cuò)誤提示,則使用以下命令修改:
/usr/sbin/setsebool httpd_can_network_connect 1
/usr/sbin/setsebool -P httpd_can_network_connect 1 (使其永久生效)
解決方案2:使用nginx反向代理服務(wù)器,使用代理服務(wù)器進(jìn)行訪問(wèn)后端接口。該方法代碼改動(dòng)量小,但是需要增加出口IP,且安裝nginx在無(wú)外網(wǎng)的環(huán)境下比較困難。
主要步驟:
兩個(gè)方案都測(cè)試成功,方案1利用Apache服務(wù)器的反向代理,而方案2則使用專門的反向代理服務(wù)。由于出口IP數(shù)量限制,目前采用方案1。
總結(jié)
以上是生活随笔為你收集整理的前后端完全分离出现跨域、无法访问后台解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在内部局域网(无外网)使用阿里云短信
- 下一篇: 分布式CAP详解,为什么三个指标不可能同