当前位置: 首页 > news >正文

单台Nginx部署多个前端项目:IP路径区分 \+ 域名区分完整实战

在日常开发、测试、内网生产环境中,我们经常遇到一个刚需场景:只有一台Nginx服务器,需要同时部署多个独立的Vue/React前端项目

很多新手会在这里产生困惑:

  • 服务器只有一个公网/内网IP,没有多个域名,怎么区分多个前端服务?

  • 如果有多个域名,Nginx 又是如何做到80端口部署多个网站不冲突?

  • server_namelocation在多前端部署中到底该怎么选?

本文结合实战场景,清晰拆解无域名(纯IP访问)有独立域名两种部署方案,彻底搞懂单Nginx多前端部署逻辑。

一、核心前置认知(重中之重)

1. Nginx 区分服务的核心逻辑

Nginx 是通过HTTP请求的 Host 请求头分发请求:

  • 多个server{}块可以同时监听同一个端口(80/443)

  • Nginx 根据请求的 Host 匹配server_name,命中对应服务配置

2. 两种部署方案核心区别

  • 无域名、仅IP访问:只有一个固定IP,无法拆分多个server_name,只能用单server + 多location路径区分不同前端项目

  • 有多个独立域名:可以配置多server块 + 独立server_name,域名一一对应前端项目,服务完全隔离

二、场景一:无域名、只有IP(最常用内网场景)

场景特点:服务器仅有内网IP(如192.168.251.8),无公网域名、无DNS解析,所有前端服务只能通过IP访问。

解决方案:统一一个server{}块,通过不同的location路径前缀区分不同前端项目。

1. Nginx 完整配置

所有前端项目共用同一个server_name(IP+localhost),靠路由路径区分服务:

server { listen 80; # 适配IP访问、本地localhost访问 server_name 192.168.251.8 localhost; # 主站前端:IP直接访问 location / { root /html/main; index index.html; # SPA单页路由刷新404解决方案 try_files $uri $uri/ /index.html; } # 后台管理前端:/admin 路径访问 location /admin/ { root /html; index index.html; try_files $uri $uri/ /admin/index.html; } # 用户端前端:/user 路径访问 location /user/ { root /html; index index.html; try_files $uri $uri/ /user/index.html; } }

2. 目录结构规范

将多个前端打包文件按路径分类存放:

/html ├── main # 主站项目 ├── admin # 后台项目 └── user # 用户端项目

3. 最终访问地址

  • 主站:http://192.168.251.8

  • 后台管理:http://192.168.251.8/admin

  • 用户端:http://192.168.251.8/user

4. 前端打包关键配置(必看,否则资源404)

路径区分的核心弊端:每个子项目必须配置对应基础路由前缀,不能用根路径/

以 Vite 项目为例:

// 后台 admin 项目 vite.config.jsexportdefaultdefineConfig({base:'/admin/'})// 用户 user 项目 vite.config.jsexportdefaultdefineConfig({base:'/user/'})// 主站项目exportdefaultdefineConfig({base:'/'})

5. 方案优缺点

✅ 优点:无需域名、无需配置DNS/hosts,单IP即可部署多个前端,适配所有内网测试环境

❌ 缺点:前端需要修改打包基础路径,多项目路由容易冲突,项目耦合度高

三、场景二:有多个独立域名(公网/正式环境)

场景特点:拥有多个域名(二级域名),所有域名均可解析到同一个Nginx服务器IP。

解决方案:配置多个独立server{}块,每个服务绑定独立server_name,服务完全隔离,无需依赖路径区分。

1. 前置准备:域名映射(核心关键)

让多个域名全部指向Nginx服务器IP192.168.251.8,两种方式:

方式1:公网环境(正式上线)

域名服务商后台配置DNS解析:

  • web.test.com→ 192.168.251.8

  • admin.test.com→ 192.168.251.8

  • user.test.com→ 192.168.251.8

方式2:内网测试(无公网DNS)

修改本机hosts文件,手动配置域名与IP映射,模拟域名解析:

  • Windows:C:\Windows\System32\drivers\etc\hosts

  • Mac/Linux:/etc/hosts

添加如下内容:

192.168.251.8 web.test.com admin.test.com user.test.com

刷新本地DNS缓存后即可生效。

2. Nginx 完整配置

每个前端项目独立一个server块,互不干扰:

# 主站 web.test.com server { listen 80; server_name web.test.com; root /html/main; index index.html; try_files $uri $uri/ /index.html; } # 后台 admin.test.com server { listen 80; server_name admin.test.com; root /html/admin; index index.html; try_files $uri $uri/ /index.html; } # 用户端 user.test.com server { listen 80; server_name user.test.com; root /html/user; index index.html; try_files $uri $uri/ /index.html; }

3. 最终访问地址

  • 主站:http://web.test.com

  • 后台:http://admin.test.com

  • 用户端:http://user.test.com

4. 前端打包配置

所有项目统一根路径,无需修改路由前缀,开发、打包更简单:

exportdefaultdefineConfig({base:'/'})

5. 方案优缺点

✅ 优点:项目完全隔离、路由干净、无路径冲突、维护简单,是企业正式环境标准方案

❌ 缺点:需要域名支持,内网测试需手动配置hosts映射

四、两种方案核心对比总结

部署方案适用场景核心配置前端打包
IP+Location 路径区分无域名、纯内网测试、单IP唯一访问入口单server块,多location区分服务子项目需配置 base 路径
域名+多Server块有多个域名、公网上线、正式生产环境多server块,独立server_name绑定域名统一 base: /,无需特殊配置

五、最终核心结论(全文重点)

  1. 只有IP、没有任何域名时:无法使用多server{}区分服务,只能通过同一个server + 多个location路径部署多个前端,依靠/admin/user等前缀区分项目。

  2. 拥有多个域名时:通过本地hosts/DNS解析将所有域名映射到唯一的Nginx服务器IP,再通过 Nginx 多server{}配置、独立server_name绑定域名,实现多前端项目完全隔离部署。

  3. server_name是域名/IP匹配规则,location是路径匹配规则,单Nginx多前端的两种部署模式,本质就是这两个规则的灵活运用。

http://www.jsqmd.com/news/1094073/

相关文章:

  • 罗德与施瓦茨(RS)的矢量网络分析仪应用场景
  • 时间管理:番茄工作法在编程中的应用
  • title: Claude Code 教程:从零搭建 AI 驱动的开发工作流(基于 Google 新版 SDLC 白皮书)
  • 计算机Java毕设实战-基于 SpringBoot 的老年人健康管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 示波器抓 I2C 时序:如何一眼看出 ACK 没拉低?
  • Sentinel 微服务学习笔记
  • Windows 局域网文件共享实战:解决“账户被禁用“与“网络访问拒绝“问题
  • React Fiber 调度架构解析
  • 工业计算机类型、功能应用及选型指南
  • 华为交换机 SNMPv3 Trap 配置与验证指南
  • CasaOS:基于Docker的个人云操作系统安装与实战指南
  • Claude Code 2026 安装指南 并改调用DeepSeek模型
  • 吉阳区正宗椰子鸡推荐|符合海南本土特色的宝藏门店
  • Linux:进程
  • ZW3D二次开发_工程图_获取/设置参考是否隐藏消隐线
  • SpringBoot 整合 MinIO 实现文件存储——私有化 OSS 方案
  • Java synchronized 与 ReentrantLock 对比分析
  • 《AI抢产能致车规存储缺货?欣芯半导体给出eMMC/UFS“供应韧性”破局与选型指南》
  • Solo DSP数据集成模块的架构设计
  • MCP协议与Playwright结合:实现零代码浏览器自动化
  • 商用级云PACS源码,云影像源码,B/S 架构 DICOM 标准,HIS 双向对接、Redis 缓存开箱即用
  • Versal GTM(1):收发器概览
  • 2026去水印不破坏原图的方法!电脑手机在线无痕去水印工具+PS教程
  • 如何甄选靠谱展厅设计公司:从效果到落地的实战指南
  • 实测拆解!Paperxie智能写作,解锁毕业论文标准化高效创作方式
  • 【system-architect】:一个让 AI 做架构建议时“说得清依据“的 Skill
  • Java计算机毕设之基于 Java 的部门通知与任务一体化管理系统 团队协作型任务分配管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • TI BOOSTXL-RS232 BoosterPack硬件解析与RS-232通信实战指南
  • 2026美容院会员管理系统选型攻略:功能对比+避坑指南
  • 查询优化-提升子查询-UNION类型