Vue 前端配置多级目录实践(基于Nginx配置方式)

前情提要

有阵子没更新博客了,因为快年结了工作比较多,这不,最近公司的对外演示环境出现问题这个活儿也落到了我的头上……

事情是这样的,原来演示环境有很多服务,每个服务都是对外单独开一个端口,比如 http://a.com.cn:8080http://a.com.cn:8081 这种,通过外网域名端口映射到内网的服务器上。最近有个变化是 为了降低安全风险,公司决定启用https,并且对外演示环境只开设一个端口

之前的样子:

现在想要的效果:

看着应该会很好实现,只需要用个Nginx就可以了嘛~

看着也没什么问题嘛,而现实狠狠地给我上了一课:

Vue 前端默认是以 / 下载资源文件的!哪怕我的html的确是从服务b返回的,但html到达用户浏览器后,获取静态资源请求仍是向http://a.com.cn:8080/ 发起的!

解决思路

想解决这个问题常见有两种方案:

  • 修改 Vue 构建源码,使用自定义路径或./作为获取静态资源的基础路径
  • 使用 Nginx 获取 Referer 请求头,根据请求头的目录转发到对应的服务

方案对比

  • 方案1需要修改代理的所有前端服务,改动量虽然不是很大,除了修改还需要再次构建部署。
  • 方案2只需要修改 Nginx

综合考虑现在演示环境的程序是由不同产品线提供的稳定版本,最好不对程序进行大的修改,最后选择了方案2。

方案2的配置方式

#演示环境Hellxz
server {
  listen 8080;
  server_name a.com.cn;
  charset utf-8;

  location /b/ {
    proxy_pass  http://server-b/;
  }

  location / {
    #根据Referer区分静态资源来源
    if ($http_referer ~ "/b/") {
       add_header referer-review $http_referer; #显示静态资源来源
       proxy_pass http://server-b; # 转发到服务b,末尾不能加/
    }
    proxy_pass  http://server-a/; #门户a
  }
}

upstream server-a {
  server   192.168.0.1:8080;
}

upstream server-b {
  server   192.168.0.1:8081;
}

就这样了,虽然前端仍是向/发起请求,但请求已经转到了正确的服务上,添加的 referer-review 请求头可以清楚地看到前端静态资源是从哪级目录过来的。本文内容就这些了,如果文章内容有错误希望读者评论与我沟通,我们一起进步!

本文同步于本人博客园(hellxz.cnblogs.com) 与 CSDN(https://blog.csdn.net/u012586326)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
配置nginx来代理vue前端项目,你可以按照以下步骤进行操作: 1. 首先,你需要从nginx的官网(https://nginx.org/download/)下载nginx软件。 2. 下载并安装nginx后,进入nginx配置文件目录(通常是在/etc/nginx/或/usr/local/nginx/conf/下),找到nginx.conf文件,使用文本编辑器打开该文件。 3. 在nginx.conf文件,你可以找到一个名为"server"的块,这是nginx的虚拟主机配置。在这个块,你可以添加一个新的location来代理vue前端项目。 4. 假设你的vue项目已经打包成静态文件,并且存放在"/var/www/vue"目录下。你可以在nginx.conf文件的"server"块添加以下配置: ``` location / { root /var/www/vue; index index.html; try_files $uri $uri/ /index.html; } ``` 这段配置告诉nginx将所有的请求都代理到/var/www/vue目录下,并尝试查找匹配的文件,如果找不到则返回index.html文件。 5. 保存并退出nginx.conf文件。然后,重新启动nginx服务以使配置生效。 ``` sudo service nginx restart ``` 现在,你的nginx已经配置好了代理vue前端项目的设置。 请注意,以上步骤假设你已经将vue项目打包成静态文件,并将其放置在指定的目录下。如果你的项目还需要与后端服务器进行通信,你还需要配置nginx的反向代理。具体的配置取决于你的项目需求和后端服务器的配置。 希望这个回答能够帮到你,如果还有其他问题,请随时询问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东北小狐狸-Hellxz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值