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

使用 Nginx 在同一端口部署两个前端项目并配置子路径

在现代 Web 开发中,我们经常需要在同一台服务器上部署多个前端项目。这不仅可以节省资源,还可以简化管理。本文将指导你如何使用Nginx在同一端口上部署两个前端项目,并通过配置子路径来区分它们。

环境准备

首先,我们需要准备两个前端项目,一个为主项目,另一个为子路径项目。我们将使用Vite作为构建工具,Nginx作为服务器。

子路径项目的Vite配置

对于子路径项目,我们需要在Vite配置中指定基础路径。这可以通过设置base属性来实现。以下是子路径项目的Vite配置示例:

base: VITE_APP_ENV !== "dev" ? "/eps/" : "/",

这段代码意味着在非开发环境下,子路径项目将被部署在/eps/路径下。

Dockerfile配置

接下来,我们需要创建一个Dockerfile来构建Nginx镜像。这个Dockerfile将复制前端项目的构建产物到指定的目录,并使用自定义的Nginx配置文件。以下是Dockerfile的示例:

FROM nginx:1.27.0USER rootENV APP_NAME=srm-ui
ENV SRM_WEB_ROOT="/app/srm"
ENV EPS_WEB_ROOT="/app/eps"COPY /dist ${SRM_WEB_ROOT}
COPY /eps-ui/dist ${EPS_WEB_ROOT}COPY /nginx.conf /etc/nginx/nginx.confCMD /bin/sh -c "/usr/sbin/nginx -g 'daemon off;'"

这个Dockerfile定义了两个环境变量SRM_WEB_ROOTEPS_WEB_ROOT,分别指向主项目和子路径项目的根目录。然后,它将两个项目的构建产物复制到这些目录,并使用自定义的Nginx配置文件。

Nginx配置

最后,我们需要配置Nginx以处理两个项目的请求。以下是Nginx配置文件的示例:

user nginx;worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;keepalive_timeout  65;server {listen       80;server_name  _;root /app;absolute_redirect off;  # 至关重要gzip on;gzip_min_length 1k;gzip_comp_level 5;gzip_vary on;gzip_buffers 32 4k;gzip_http_version 1.0;gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;location / {root   /app/srm;index  index.html index.htm;try_files $uri $uri/ /index.html;}location /eps {alias   /app/eps;index index.html index.htm;try_files $uri $uri/ /eps/index.html;}}
}

在这个配置中,我们定义了两个location块。第一个location /块处理主项目的请求,第二个location /eps块处理子路径项目的请求。try_files指令确保如果请求的文件或目录不存在,Nginx将回退到/index.html,这对于单页应用(SPA)至关重要。

http://www.lryc.cn/news/468660.html

相关文章:

  • 怎么选择独立站SEO效果好的wordpress模板
  • 深度学习速通系列:超长法律文件隐私过滤(基于预训练模型Bert)
  • 【数据结构与算法】之队列详解
  • python最新h5st4.9.1调用源码(2025-10-25)
  • 微软投资比特币:将总资产1%投资于BTC?股东投票决定最终结果!
  • vue中标签的ref和id的用法和区别优缺点
  • Python基础知识-文件篇
  • MacOS 环境下 VSCode 的 C++ 环境搭建
  • WPF样式
  • Vue Router 如何配置 404 页面?
  • 【C++:智能指针】
  • onlyoffice docker启用jwt并生成jwt
  • 希尔贝壳受邀参加首届“数据标注产业大会暨供需对接会”
  • 35.第二阶段x86游戏实战2-C++遍历技能
  • Jenkins发布vue项目,版本不一致导致build错误
  • vue3使用webSocket
  • 957种卫星参数文档的分享下载
  • 负载均衡详解:背景、实现技术、作用范围与常用算法
  • CCAA:产品认证基础3(产品认证方案)
  • go语言中的Scan()和Scanln()输入函数
  • UML外卖系统报告(包含具体需求分析)
  • net Core Data Protection 数据保护 加密 编码 哈希 FromServices
  • 4K手机壁纸之动漫系列
  • 关于eclipse的workspace
  • Vue引入高德地图自定义信息窗体绑定点击事件无效解决方案
  • 私域朋友圈运营
  • 【Vue】word / excel / ppt / pdf / 视频(mp4,mov) 预览
  • 如何加密电脑磁盘?电脑本地磁盘加密方法介绍
  • 1688、淘宝、京东搜索商品聚合接口技术实现与代码示例
  • 视频智能分析平台LiteAIServer烟火识别软件引领烟火检测与识别的智能新纪元