前后端分離,使用nginx解決跨域問題
前端:vue.js+nodejs+webpack
后臺:SpringBoot
反向代理服務(wù)器:nginx
思想:將前端代碼打包,讓nginx指向靜態(tài)資源,nginx對后臺請求進(jìn)行轉(zhuǎn)發(fā)。
1、將前端代碼打包:
會生成一個(gè)dist文件夾。包含一個(gè)index.html文件和一個(gè)static文件夾,路徑以我本地為例:
/Users/xxx/ideaProjects/webtest/dist
2、打開
/usr/local/etc/nginx目錄下的nginx.conf,在server中添加如下:
listen 80; #原為8080,避免沖突,更改為80
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /Users/xxx/ideaProjects/webtest/dist;
index index.html;
# 此處用于處理 Vue、Angular、React 使用H5 的 History時(shí) 重寫的問題
if (!-e $request_filename) {
rewrite ^(.*) /index.html last;
break;
}
}
# 代理服務(wù)端接口
location /api/ {
proxy_pass http://localhost:8080/;# 代理接口地址
}
測試
前端發(fā)送請求:http://localhost/test ,vue-router將其重定向?yàn)閔ttp://localhost/api/demo/1,實(shí)際訪問是http://localhost:8080/demo/1。
直接向后臺發(fā)送請求:訪問http://localhost/api/demo/1,實(shí)際訪問是:http://localhost:8080/demo/1
內(nèi)容擴(kuò)展思考:
1).
# 代理服務(wù)端接口
location /api/ {
proxy_pass http://localhost:8080/;# 代理接口地址
}
代理接口地址只到8080,那么他會自動(dòng)將后臺項(xiàng)目的名稱加上??? 比如接口是http://148.70.110.87:8080/項(xiàng)目名稱/方法名稱 。。。
2).js 中是這樣請求的 ,nginx是按照您上面的配置,但是請求出錯(cuò)http://148.70.110.87/api/index2 404 (Not Found)
axios.post('/api/index2')
.then( (response) =>{
console.log(response);
})
.catch( (error)=> {
console.log(error);
});
3).您的第三個(gè)步驟,測試,實(shí)在看不懂要是能有相關(guān)的代碼就好了