Nginx路径转发需先梳理流量映射表,再按=、^~、普通前缀、~*、~优先级顺序配置location;proxy_pass末尾斜杠决定路径是否剥离,root与alias拼接逻辑不同,须严格区分。

直接在 server 块里写 location 就行,关键是匹配规则要理清、顺序要合理,不然请求容易被错配或漏配。
先画清楚路径分发表
别急着写配置,先列清楚每条路径对应哪个服务。比如:
-
/→ 前端主站(静态文件目录/var/www/app1) -
/admin/→ 管理后台(静态文件目录/var/www/admin) -
/api/→ 后端接口(代理到http://127.0.0.1:8080) -
/upload/→ 文件服务(代理到http://127.0.0.1:9000)
这张表就是你写 location 的依据,每行对应一个块。
掌握五种匹配方式的实际用法
location 不是按书写顺序执行的,Nginx 有明确的优先级逻辑:
-
= /:精确匹配根路径,适合固定页面如404.html -
^~ /admin/:前缀匹配且不查正则,适合管理后台这类确定路径 -
/api/(无修饰符):普通前缀匹配,最长匹配优先,适合常规 API 路由 -
~* \.(jpg|png|gif)$:不区分大小写的正则,适合静态资源缓存 -
~ ^/user/\d+$:区分大小写的正则,适合动态 ID 路径重写
注意:^~ 和普通前缀都会参与“最长前缀”比对,但一旦命中 ^~,就不再检查后面的正则 location。
proxy_pass 的斜杠问题必须盯紧
这是最常出错的地方,直接影响后端收到的路径:
-
location /api/ { proxy_pass http://127.0.0.1:8080; }→ 请求/api/users转发为/api/users -
location /api/ { proxy_pass http://127.0.0.1:8080/; }→ 同样请求转发为/users(自动剥离/api/)
后端是否带 /api 前缀,决定了你 proxy_pass 末尾要不要加斜杠。前后端约定不清,这里一错,整个接口就 404。
静态路径用 root 或 alias 要分清
两者都指定位文件位置,但拼接逻辑不同:
-
root /var/www;+location /app/ { ... }→ 请求/app/logo.png查找/var/www/app/logo.png -
alias /var/www/app/;+location /app/ { ... }→ 请求/app/logo.png查找/var/www/app/logo.png(/app/被完全替换)
用 alias 时,末尾斜杠不能少;用 root 更直观,推荐新项目统一用 root 配合路径层级设计。



















