vue 后端代理问题

本文记录如何设置反向代理,让vue访问同一IP地址内的后端接口。

不同于ASP .NET MVC直接localhost一撸到底,如果在vue中的axios中设置请求接口为localhost,如下:

axios.defaults.baseURL = ‘http://localhost:8081’
则在本地开发时是没有问题的,但是在发布到云端后会报错,
这是因为此时这个POST请求是由浏览器直接向localhost这个地址,通俗讲就是浏览这个页面的电脑发出的,在这里自然是找不到8081上的接口,因为接口发布在云端嘛。

解决办法有3种,最后一种是目前采用的解决办法。

1)直接在axios中写后端接口的具体地址

如下:

axios.defaults.baseURL = ‘接口具体IP地址+端口’

axios.defaults.baseURL = ‘http://1.2.3.4:8081’
这样便可以访问后端的接口地址。但是这样会将后端的接口地址直接暴露在浏览器中,且云服务器需要开放8081,虽然可以解决问题,但是不是很优美。

2)在vue程序中设置反向代理。

在vue工程的index.js中找到ProxyTable,设置反向代理的相关内容。可参考网上资料。这时axios的默认baseURL就可以写成:
axios.defaults.baseURL = ‘/api’
在浏览器中调用POST接口访问后端接口时,接口地址就变成:“vue前端服务器地址/api/”,这样后端接口的地址就不会暴露在浏览器中了。如下图,其中XX.XX.XX.XX:8088/api/就是反向代理后的后端接口,真实接口地址并没有暴露。

但是这样依然有缺点:a)仍需要在vue工程中显示地给出后端接口的地址;b)项目打包后,在Nginx中该方法会失效,具体原因不明。

3)在Nginx中设置反向代理

最后采用的解决办法是在Nginx中使用反向代理。以下理解可能有误:当在Nginx中设置反向代理后,浏览器发出的请求会传送给Nginx,由Nginx决定请求发送至哪里。这样就会有一个好处,因为Nginx和Tomcat在同一个IP地址内,因此Nginx可以直接通过127.0.0.1加端口号来访问后端接口。这样既无需显示地给出后端接口地址(只要给个端口号),也可以在生产环境中使用反向代理,云端同样无需开放8081端口。

在Nginx中设置反向代理的方法如下,在nginx.conf中输入(注意api后面有个/):

location /api/ {
proxy_pass http://127.0.0.1:8081/;
}
就可以用 “vue前端地址/api/”来访问位于8081端口的后端接口啦。vue中axios的设置与2)一致:

axios.defaults.baseURL = ‘/api’

补充:

经过上述方法,可以在post请求中访问到后端的接口了。但是此时若在本地开发,需要修改axios的baseURL,不是很方便。因此,可以在main.js中使用以下代码,判断向前端服务器发出请求的是否为localhost,然后改变axios的baseURL:

复制代码
let host = window.location.host // 主机
let reg = /^localhost+/
if (reg.test(host)) {
// 若本地项目调试使用
axios.defaults.baseURL = ‘http://localhost:8081’
} else {
// 远程访问 使用代理
axios.defaults.baseURL = ‘/api’
}
复制代码
经过上述方法,就解决了生产环境下,实现vue通过post访问同一IP地址下的后端接口。

参考:

https://www.cnblogs.com/brisk/p/16146819.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值