最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 server 块如何实现不同目录映射不同后端
时间:2026-08-18 20:17:49 编辑:袖梨 来源:一聚教程网
Nginx 通过同一 server 块内多个 location 指令按路径前缀匹配并 proxy_pass 转发,实现同域名下不同目录精准分发;proxy_pass 结尾斜杠影响路径重写,多域名则用多个 server 块分别配置。
Nginx 通过 server 块 + location 指令组合,就能把同一域名下的不同路径(即不同目录)精准分发到不同后端服务。关键不在 server 块本身做目录映射,而是在一个 server 块里用多个 location 匹配路径前缀,再各自用 proxy_pass 转发。
同一 server 下按路径区分后端
一个 server 块监听某个端口和域名,内部用多个 location 规则识别请求路径,每个规则独立配置转发目标:
-
location /api/→ 转发到http://127.0.0.1:3000/ -
location /admin/→ 转发到http://127.0.0.1:8001/ -
location /(根路径)→ 静态文件或主前端服务
示例配置:
server {listen 80;server_name example.com;# 静态资源或主站首页location / {root /var/www/frontend;try_files $uri $uri/ /index.html;}# API 接口统一走 /api/ 前缀location /api/ {proxy_pass http://127.0.0.1:3000/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}# 后台管理系统单独部署location /admin/ {proxy_pass http://127.0.0.1:8001/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
注意 proxy_pass 结尾的 /:
- 写成
http://127.0.0.1:3000/,表示/api/user→ 转发为/user - 写成
http://127.0.0.1:3000(无尾斜杠),会原样带上/api/user,后端容易 404
多个 server 块对应不同域名 + 各自根目录
如果不同“目录”实际是不同域名(如 a.example.com 和 b.example.com),那就用多个 server 块,每个块用 server_name 匹配域名,并设置独立 root 或 proxy_pass:
-
server_name a.example.com→root /var/www/a/或proxy_pass http://backend-a -
server_name b.example.com→root /var/www/b/或proxy_pass http://backend-b
这种结构更清晰,适合完全隔离的站点。
路径重写与子路径兼容处理
某些后端不接受带前缀的路径(比如 /api/xxx 转过去变成 /xxx 才能识别),可用 rewrite 配合 proxy_pass:
location /v1/ {rewrite ^/v1/(.*)$ /$1 break;proxy_pass http://127.0.0.1:9000;}
也可用 proxy_redirect 调整响应头中的跳转地址,避免后端返回的 Location 头暴露内网路径。
注意事项
-
location匹配遵循最长前缀优先原则,/api/v2/会优先进入location /api/v2/而不是/api/ - 若需精确匹配某路径(如只匹配
/health),用location = /health - 静态文件建议用
root+try_files,动态接口一律用proxy_pass - 所有
proxy_pass后端地址必须带协议(http://或https://),不能只写localhost:3000
不复杂但容易忽略
相关文章
- 小米路由器网络不稳定的原因有哪些(如何解决小米路由器网络不稳定的问题) 08-18
- 吉利汽车2026上半年“量价利齐升”:营收破1700亿 海外销量激增158% 08-18
- 两个结构化数据自检工具的分工:语法校验与效果预览 08-18
- 元旦放假通知模板:清晰简洁的放假安排与温馨祝福 08-18
- 和平精英海岛 2.0 更新奖励是什么 08-18
- excel表格如何利用VBA代码插入交叉矩形图 08-18