Vue项目打包在nginx容器中正确配置代理的方式
bmj

起因

在做项目时打包前端部署docker容器后,无论怎么配置容器内的nginx代理default.conf文件,就是无法请求到后端的接口。

后来我在修改了前端的.env.production

把图中的localhost改成了服务器的ip之后再打包发布,竟然就可以了。

但是问题也就出现了,如果我要部署不同的服务器,难道我还要每次都在代码里修改一下ip之后再打包部署不成?


解决思路

首先我先贴一下我的nginx配置default.conf

图中的红色打码部分就是我所要跳转的后端服务地址。

配置文件并没有什么问题,但是实在容器内部的,所以如果我在.env.production文件中写上localhost,访问的前端则只是浏览器运行所在的服务器。

可以通过浏览器f12看到请求的地址

那么该如何修改呢?


解决办法

我索性就把.env.production文件里的地址删了,然后打包发布,看看效果。

果然,走了容器中的nginx代理,请求到了后端。

原来.env.production文件可以不写,这样在build打包之后请求的便是服务器宿主机的ip地址,这样nginx的代理便能生效了。


注意

需要注意的是,我的前端是封装了axios,设置了baseUrl,也就是在请求地址端口后面的那层根路径。

这个路径需要与nginx配置的location一致,不然nginx肯定是无法代理到的。


参考

nginx配置的default.conf文件可以在我的github上找到

https://github.com/BMJLearnToHelloWorld/bmjline-vue-admin/blob/master/nginx/default.conf

 Comments