前言
在開發(fā)靜態(tài)頁面時,類似Vue的應用,我們常會調(diào)用一些接口,這些接口極可能是跨域,然后瀏覽器就會報cross-origin問題不給調(diào)。
最簡單的解決方法,就是把瀏覽器設為忽略安全問題,設置--disable-web-security。不過這種方式開發(fā)PC頁面到還好,如果是移動端頁面就不行了。
解決辦法
使用Nginx轉(zhuǎn)發(fā)請求。把跨域的接口寫成調(diào)本域的接口,然后將這些接口轉(zhuǎn)發(fā)到真正的請求地址。
舉個栗子
例如我們在開發(fā)一個Vue應用。
原先:
調(diào)試頁面是: http://192.168.1.100:8080/
請求的接口是: http://ni.hao.sao/api/get/info
步驟一:
請求的接口是: http://192.168.1.100:8080/api/get/info
PS:這樣就解決了跨域問題。
步驟二:
安裝好Nginx后,去到/usr/local/etc/nginx/目錄(這是Mac的),修改nginx.conf文件。
步驟三:
把默認的server配置注釋掉。
在下面增加:
server{
listen 8888;
server_name 192.168.1.100;
location /{
proxy_pass http://192.168.1.100:8080;
}
location /api{
proxy_pass http://ni.hao.sao/api;
}
}
保存后,啟動Nginx。
PS:并不需要太了解Nginx的配置,很簡單的。
步驟四:
訪問: http://192.168.1.100:8888/
搞定。
PS:注意訪問的端口是‘8888',有其他域的地址繼續(xù)加location就行了。
錯誤示范
我一開始不太懂Nginx的配置,以為可以如下配置。
server{
listen 8080;
server_name 192.168.1.100;
location /api{
proxy_pass http://ni.hao.sao/api;
}
}
之所以這么寫,是我認為這樣可以讓Nginx幫我監(jiān)聽8080的請求,然后只轉(zhuǎn)發(fā)匹配的請求。我沒有意識到的是Nginx這么寫后,是需要占用8080端口的。
既然需要占用端口,那也就不能再被其他相同協(xié)議的進程占用,就導致開發(fā)的頁面無法以8080端口啟用。經(jīng)同事提點,才想起這事情,換下思路,就有了最上面的方法。
總結(jié)
其實不僅是在開發(fā)調(diào)試時候能這么干,在生產(chǎn)環(huán)境也能這么玩。利用Nginx轉(zhuǎn)發(fā)請求之后,就能夠讓所要部署的靜態(tài)頁面不需要放在跟請求接口同域的地方。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。