单机部署多个前端项目时,nginx 应用 alias 实现同端口多路径隔离或多个 server 块实现端口级隔离;root 仅在 server 或 location / 中生效,子路径 location 中需用 alias;单页应用必须配置 try_files 和 index。

单机部署多个前端项目时,nginx 的 root 不能在多个 location 块里重复生效——这是最常踩的坑。root 只在 server 块顶层或 location / 中有效,其他子路径下的 location /a、location /b 里写 root 是被忽略的。
用 alias 实现同端口多路径隔离
适合把不同项目挂载到不同 URL 路径下(如 /admin、/user),且所有项目共用一个端口(比如 80):
-
alias后路径必须以/结尾,否则静态资源 404 - location 匹配路径会从请求中“剥离”,不拼进实际文件路径
- 每个 location 独立指定目标目录,互不影响
示例配置:
location ^~/admin/ {
alias /var/www/admin/dist/;
index index.html;
try_files $uri $uri/ /admin/index.html;
}
location ^~/user/ {
alias /var/www/user/dist/;
index index.html;
try_files $uri $uri/ /user/index.html;
}
用多个 server 块实现端口级隔离
适合开发测试环境,每个项目独占一个端口(如 8080、8081、8082),配置最简单、最不易出错:
- 每个
server块监听不同listen端口 - 每个块内可自由使用
root,且只作用于本 server - Windows 下路径含空格需用双引号包裹,斜杠统一用正斜杠
/
示例:
server {
listen 8080;
root "D:/projects/vue2/dist";
index index.html;
try_files $uri $uri/ /index.html;
}
server {
listen 8081;
root "D:/projects/react/dist";
index index.html;
try_files $uri $uri/ /index.html;
}
注意 root 和 alias 的核心区别
别混淆两者行为逻辑:
-
root:把 location 匹配的完整路径(含前缀)拼接到 root 路径后找文件
→location /a { root /data; }→ 请求/a/logo.png查找/data/a/logo.png -
alias:直接用 alias 路径替换 location 匹配前缀
→location /a { alias /data/; }→ 请求/a/logo.png查找/data/logo.png
配套关键配置不能少
无论用哪种方式,单页应用(Vue/React)都需加 try_files 支持前端路由:
-
try_files $uri $uri/ /index.html;—— 兜底返回 index.html,让前端 router 处理路径 -
index index.html;—— 明确默认首页 - 确保 dist 目录结构正确,
index.html在根下,静态资源(js/css/img)在对应子目录











