文档首页> 技术教程> 多个服务挂到一个域名的不同路径

多个服务挂到一个域名的不同路径

发布时间:2026-04-03 18:42        更新时间:2026-04-04 17:31
一台服务器上跑着管理后台、接口服务和文档站,又不想为每个服务单独申请域名,用 nginx 按路径分发就能解决。 一、location 前缀分发 核心思路是一个 server 块里按路径前缀转发到不同端口: location /api/ { proxy_pass http://127.0.0.1:8000/; } location /admin/ { proxy_pass http://127.0.0.1:9000/; } location / { root /var/www/docs; } location 的匹配按最长前缀优先,但顺序和写法错了仍会把请求落到错误的块里。注意 proxy_pass 末尾斜杠的差别:带斜杠会把匹配到的前缀剥掉再转发,不带则原样传过去,两种都合法,要和应用的路由约定一致,否则会出现 //api 这类双重前缀。拿不准某个请求会落到哪条 location 时,用 curl -I 加路径实测,比反复读配置猜快得多。 二、应用侧的 base path 服务被挂在子路径下,应用自身也要知道这件事。前端脚手架项目设置 publicPath 或 base 为对应子路径后重新构建;后端框架有对应参数,例如 FastAPI 启动时加 --root-path /api。不改这个配置,应用生成的跳转链接和资源引用会丢前缀,表现就是首页能开、点进任意子页就 404。改完 base path 后清掉旧构建产物再重新构建,残留的旧产物里带着硬编码路径,会让人排查半天。 三、静态资源路径的坑 最常见的翻车点是页面里写死绝对路径,比如 /static/app.js。站点挂在根路径时没问题,挂到 /admin/ 下浏览器就会去请求根下的 /static,直接 404。处理办法有三条:改成相对路径、构建时配置 base、或在 nginx 里单独补一条 /static/ 的转发规则。还有一处隐蔽情况:CSS 文件里的 url() 引用,base 改了但样式文件没有重新生成,图片就会批量加载失败。排查时打开浏览器开发者工具的 Network 面板,看 404 请求的完整 URL,一眼就能定位是哪类引用写错了。根路径挂静态文档站时,子路径转发和静态目录混用,try_files 与 index 的配置顺序容易绕晕,改一处就实测一处。 四、验证方式 改完 nginx 先检查语法再生效: nginx -t && systemctl reload nginx 然后逐个路径 curl 验证: curl -I http://example.com/api/ curl -I http://example.com/admin/ 返回 200 或预期的业务状态码即为通。全部路径过一遍再收工,别只验证新加的那条;涉及页面跳转的,再用浏览器从首页点进去走一遍真实链路。