随笔 - 441  文章 - 4  评论 - 84  阅读 - 109万 

遇到的问题

在开发vue 前端程序时,我们会创建多个项目,比如用户管理为一个应用,系统管理为一个应用,这样多个应用势必需要开多个端口,这样问题就来了,我们在登录后会生成一个token,这个token我们会存到浏览器的localstorage 中,这样 token 在不同的应用中就不能共享了,希望在登录后,不同的应用都能读到这个token。

 

解决方案

我们可以使用nginx 来解决这个问题,利用nginx 的反向代理功能,我们可以通过不同的上下文路径,将请求转发到不同的应用,这样我们可以通过一个域名访问到不同的应用,这样跨域的问题自然就解决了。

nginx 配置文件配置如下:

复制代码
location /jpaas {
             proxy_set_header Host       $host;
             proxy_pass http://localhost:8002;
        }
        
        location /api/ {
             proxy_set_header Host       $host;
             proxy_pass http://localhost:9900/;
        }
复制代码

这样我们通过访问 /jpaas/ 就将请求转发到 http://localhost:8002/jpaas

注意proxy_pass 的配置,注意后面是否带 / 

如果不带 / 请求会转发到 http://localhost:port/上下文

如果带 / 请求会转发到 http://localhost:port ,不包含上下文。

 

VUE程序改造

因为应用默认是没有上下文的,因此我们需要对程序一些修改:

比如修改 vue.config.js

const vueConfig = {
  publicPath: "/jpaas",

默认是没有 这个 publicPath 的,我们增加一个。

另外 proxy 也可以去掉:

复制代码
devServer: {
    // development server port 8000
    port: 8002,
    /*
    proxy: {
      '/api': {
         //target: 'http://139.186.65.108:9900',
         //target: 'http://129.28.157.247:9900',
        target: 'http://localhost:9900',
        pathRewrite: { '^/api': '' },
        ws: false,
        changeOrigin: true
      }
    }*/
  },
复制代码

这里的proxy 是可以注释掉的,他的意思是将使用 /api 的请求转发到 后端的网关,因为我们在上面统一通过nginx 来处理,所以这里我们 就不再需要这个这个来处理跨域的问题。

修改路由配置

export default new Router({
  mode: 'history',
  base: "/jpaas",
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRouterMap
})

这里增加一个base。

这样 我们通过一个nginx 就实现了 多个应用的跨域问题。

 

posted on   自由港  阅读(390)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2019-01-31 J2CACHE 两级缓存框架
2019-01-31 MYSQL 事务测试
点击右上角即可分享
微信分享提示