nginx,前端配置请求路径,后端接口应该怎么写??

你的配置分析

nginx

复制代码
location /api/ {
    proxy_pass   http://localhost:8080/admin/;
}

注意:proxy_pass 最后有一个 斜杠 /,这会影响路径的转发方式。

二、路径转发规则

规则:如果 proxy_pass 以 / 结尾

  • 原路径中的 /api/ 会被替换为 /admin/

  • 更准确地说:匹配到的部分(/api/)会被整个删除 ,然后拼接上 proxy_pass 的路径

示例映射

前端请求 Nginx 转发给后端
/api/employee/login http://localhost:8080/admin/employee/login
/api/employee/list http://localhost:8080/admin/employee/list
/api/order/detail http://localhost:8080/admin/order/detail

三、你的后端接口应该怎么写

✅ 正确写法

java

复制代码
@RestController
@RequestMapping("/admin/employee")
public class EmployeeController {
    
    // 前端调用:/api/employee/login
    // Nginx 转发:/admin/employee/login
    // 最终匹配:@RequestMapping("/admin/employee") + @PostMapping("/login")
    @PostMapping("/login")
    public Result login(@RequestBody LoginDTO loginDTO) {
        // 登录逻辑
        return Result.success();
    }
    
    // 前端调用:/api/employee/list
    // Nginx 转发:/admin/employee/list
    @GetMapping("/list")
    public Result list() {
        return Result.success();
    }
}

❌ 错误写法

java

复制代码
// 错误:如果写成这样
@RequestMapping("/api/employee")  // ❌ 后端没有 /api 路径
public class EmployeeController {
    @PostMapping("/login")
    public Result login() {
        // 转发后是 /admin/employee/login,匹配不到 /api/employee/login
    }
}

四、完整流程示例

场景:员工登录

  1. 前端代码

javascript

复制代码
// 前端调用
axios.post('/api/employee/login', {
    username: 'admin',
    password: '123456'
})
  1. Nginx 转发

nginx

复制代码
location /api/ {
    proxy_pass   http://localhost:8080/admin/;
}

实际转发给后端:http://localhost:8080/admin/employee/login

  1. 后端接口

java

复制代码
@RestController
@RequestMapping("/admin/employee")
public class EmployeeController {
    
    @PostMapping("/login")
    public Result login(@RequestBody LoginDTO loginDTO) {
        // 处理登录
        // 访问路径:/admin/employee/login
        return Result.success();
    }
}

五、特殊情况:如果不以斜杠结尾

假设你的配置是:

nginx

复制代码
location /api/ {
    proxy_pass   http://localhost:8080/admin;  # 注意:没有最后的 /
}

那么转发规则会不同:

  • /api/employee/login → http://localhost:8080/adminemployee/login(注意:/admin 和 employee 直接拼接,缺少斜杠)

  • 这通常不是你想要的效果,所以建议保持配置以 / 结尾。

六、总结

你的理解:

  • ✅ @RequestMapping("/admin/employee") 是正确的

  • ✅ 前端调用 /api/employee/login 也是正确的

  • ✅ 后端写 /login 接口匹配也是正确的

核心要点:

  1. 前端路径中的 /api/ 会被 Nginx 替换成 /admin/

  2. 后端接口路径中不要出现 /api/ ,应该用 /admin/

  3. 你的 @RequestMapping("/admin/employee") 正好匹配转换后的路径

这样配置的好处是:前端不需要知道后端的具体路径前缀(/admin),只需要统一调用 /api/xxx,Nginx 负责做路径映射。

相关推荐
星恒随风11 小时前
Linux线程同步与互斥(二):从日志系统与线程池设计,到线程安全单例、可重入函数和死锁原理
linux·运维·状态模式
学Linux的语莫1 天前
python中类的常见写法
开发语言·python·状态模式
223糖1 天前
Tool Calling 是什么?用后端接口的思路讲清楚
状态模式
染指11102 天前
151.Agent-LangGraph-Send发送(Map-Reduce模式)
人工智能·python·langchain·状态模式·agents
鸽鸽程序猿4 天前
【项目】【在线判题系统】竞赛发布与撤销发布
状态模式
lemon_sjdk4 天前
从一段真实的 Electron IM 前端代码,看高级前端的工程化修养
前端·electron·状态模式·im
Nebula_g5 天前
云禾外卖补充—项目整体后端运行逻辑-对流程的更深层次理解
java·开发语言·网络·数据库·状态模式·javase
Wang's Blog5 天前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
Java后端的Ai之路5 天前
14、ReactJS - 路由(Router)
前端·react.js·状态模式
星恒随风5 天前
Linux线程概念详解:从分页存储、页表、MMU与TLB,深入理解线程和进程的区别与联系
linux·运维·笔记·学习·状态模式