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/loginhttp://localhost:8080/adminemployee/login(注意:/adminemployee 直接拼接,缺少斜杠)

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

六、总结

你的理解:

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

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

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

核心要点

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

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

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

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

相关推荐
一水12 小时前
TTFT优化:一个方案的5次推倒重来
java·ai·状态模式
yz_aiks2 天前
Requestly规则使用技巧:前端联调、接口Mock与网络请求调试实战
前端·网络·状态模式·requestly
星恒随风2 天前
C++ STL 详解:map 与 multimap 的使用、operator[]
开发语言·c++·笔记·学习·状态模式
Dontla3 天前
q搜索 / q过滤解释(q参数、query参数、q=)
状态模式
冰箱上的笑话5 天前
从 CORS 报错到两套方案选型:一份能直接抄的跨域复盘
状态模式·安全性测试·跨域
凤山老林6 天前
从美团全栈化看 AI 冲击:前端转全栈,是自救还是必然
前端·人工智能·状态模式
码云数智-大飞6 天前
前后端沟通总吵架,一套高效协作规范分享
状态模式
不吃辣4906 天前
vibe coding | 如何做一个skill?
ai·状态模式
早点睡啊Y8 天前
深入学LangChain官方文档(二十二):Frontend 高级形态——Headless Tools、Time Travel 与 Generative UI
ui·langchain·状态模式
xxwl5859 天前
markdown基础语法
状态模式