同端口部署多个前端服务的实现方法

🚀 同端口部署多个前端服务的实现方法这里以Vue为例

在生产环境中,有时我们需要在 同一个服务器端口 上部署多个前端项目,例如:

  • 不同业务模块的前端服务共用同一域名;
  • 测试环境统一端口管理;
  • 前后端集成部署方便。

本文介绍几种常见实现方式及 Vue 项目的必要配置。


🧱 一、使用反向代理(Nginx/Apache)

通过反向代理服务器(如 NginxApache)配置不同路径或子域名指向不同前端服务。
以下以 Nginx 为例:

server {
    listen 80;
    server_name example.com;

    location /app1 {
        alias /path/to/app1/dist;
        try_files $uri $uri/ /app1/index.html;
    }

    location /app2 {
        alias /path/to/app2/dist;
        try_files $uri $uri/ /app2/index.html;
    }
}

此配置将 /app1/app2 分别映射到两个独立的前端项目目录。

⚠️ 注意:需确保前端项目的静态资源路径正确处理(如设置 publicPath)。


🌐 二、基于子域名路由

通过 DNS 解析和服务器配置实现不同子域名指向不同服务:

server {
    listen 80;
    server_name app1.example.com;
    root /path/to/app1/dist;
    try_files $uri $uri/ /index.html;
}

server {
    listen 80;
    server_name app2.example.com;
    root /path/to/app2/dist;
    try_files $uri $uri/ /index.html;
}

需在 DNS 管理中添加:

app1.example.com → 服务器IP
app2.example.com → 服务器IP

🐳 三、容器化部署(Docker)

使用 Docker Compose 部署多个容器,通过 Nginx 统一暴露端口。

version: '3'
services:
  nginx:
    image: nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
  app1:
    build: ./app1
  app2:
    build: ./app2

Nginx 配置中通过 proxy_pass 将请求转发到不同容器。


⚙️ 四、前端路由与构建路径配置

对于 单页应用(SPA),需要正确设置构建路径与路由前缀,否则页面刷新会出现 404 错误。

1️⃣ Vue CLI 项目(Vue 2)

vue.config.js 中设置:

module.exports = {
  publicPath: '/app1/', // 与部署路径保持一致
  outputDir: 'dist'
}

src/router/index.js 中修改:

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/views/Home.vue'

Vue.use(Router)

export default new Router({
  mode: 'history', // 或 'hash'
  base: '/app1/',  // 👈 部署路径(关键)
  routes: [
    { path: '/', name: 'home', component: Home },
    { path: '/about', name: 'about', component: () => import('@/views/About.vue') }
  ]
})

如果项目部署在 /app2 下,则改为 base: '/app2/'
若使用 Hash 模式(mode: 'hash'),可避免服务器端路径匹配问题。


2️⃣ Vue 3 项目(Vite 或 Vue Router 4)

vite.config.js 中设置:

export default defineConfig({
  base: '/app1/'
})

src/router/index.js 中修改:

import { createRouter, createWebHistory } from 'vue-router'
import Home from '@/views/Home.vue'

const router = createRouter({
  history: createWebHistory('/app1/'), // 👈 与部署路径一致
  routes: [
    { path: '/', component: Home },
    { path: '/about', component: () => import('@/views/About.vue') }
  ]
})

export default router

🧩 五、注意事项

项目配置项示例
Nginxlocation /app1 + alias映射到独立目录
Vue RouterbasecreateWebHistory('/app1/')保持一致
Vue 构建配置publicPathbase对应 /app1/
访问地址http://localhost/app1/访问路径

🔒 六、生产环境优化建议

  • ✅ 静态资源路径需正确处理,避免 404
  • ✅ 浏览器路由需与代理配置匹配(HashRouter 或 MemoryRouter 可避免此问题)
  • ✅ 启用 HTTPS 并配置 HTTP/2 提升性能
  • ✅ 对于动态端口或实时通信需求,可考虑使用 WebSocketSSE

🧭 七、小结

目标关键配置
同端口部署多个前端使用 Nginx 反向代理
各项目路由独立设置 Vue Router base
资源路径正确加载配置 publicPath / base
页面刷新无 404try_files 指向正确 index.html

📘 总结一句话:

想在同端口部署多个 Vue 前端项目,关键在于
“Nginx 路径映射 + Vue publicPath + Router base 一致”。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值