- 你是否厭倦了老是依賴后台去處理跨域,把握不了主動權
- 你是否想模仿某個app倒騰一個demo,卻困於接口無法跨域
那么很幸運,接下來我將現實不依賴任何后台,隨心所欲的想訪問哪個域名就訪問哪個!
下載nginx
地址: http://nginx.org/en/download.html
注意: 存放目錄中不能含有中文
nginx配置
強大的nginx反向代理工具,有很多東西值得我們去研究,這里我只貼出核心代碼,其他的還有待深入。例如我想做一個豆瓣的高仿app,調用 搜索圖書接口
-
本地電腦ip:192.168.1.168
-
本地React工程訪問地址:192.168.1.168:404
-
實現跨域后React工程訪問地址:192.168.1.168
-
實現跨域后豆瓣接口調用的地址: //192.168.1.168/douban/v2/book/search?q=解憂雜貨店&tags=12
nginx.conf server
完整配置文件
https://github.com/helijun/react-learn/blob/master/nginx/conf/nginx.conf
啟動nginx
將上面的配置文件替換你本地的nginx.conf
更改ip地址,server監聽端口
cd到nginx存放的根目錄
start nginx.exe
到此為止,大功告成,沒錯就是這么簡單。測試效果:
另外附上nginx常用的幾個命令
start nginx.exe //啟動
nginx.exe -s reload //重啟
nginx.exe -s stop //快速停止
nginx.exe -s quit //完整有序停止
總結
其實前端跨域問題在現在的前后端分離的項目中,應該是說普遍存在的,之前也寫過相關的文章總結 jsonp跨域請求、優雅的封裝ajax,含跨域,但是都基本上是要后台配合的,並且還有很多局限性。那么現在這種方式,就真的很隨心所欲的,比如我現在還想代理到百度的api,那么只要在那個server中再添加一個location即可,如:
location /baidu {
rewrite ^/baidu/(.*)$ /$1 break;
proxy_pass https://api.baidu.com;
}
注意事項
或許你發現了,所有的請求都添加了一個'douban'前綴,那么在真實的項目中,務必將這個前綴設置為一個變量,然后所有的ajax請求url都拼接這個前綴,防止后續如果有變更導致牽一發而動全身。
固定ip
為了防止ip變化導致nginx配置失效,我這里固定ip為 192.168.1.168
打開網絡和共享中心->本地連接->屬性->雙擊Internet協議版本4(TCP/IPv4)屬性