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 负责做路径映射。

相关推荐
幽络源小助理2 天前
WordPress REST API 深度实战:从自定义端点到 Headless CMS 架构全拆解
架构·状态模式
牧瀬クリスだ4 天前
Spring统一功能处理
java·spring boot·spring·状态模式
半生过往17 天前
前端工程师学习智能体开发(一)
前端·学习·状态模式
Wang's Blog17 天前
Java框架快速入门: Spring Security+OAuth2之单点登录(SSO)实战
服务器·spring·状态模式
JianZhen✓18 天前
解决SPA发版旧版本残留+动态路由打包失效的完整方案(附落地代码)
前端·状态模式
2501_9339232519 天前
统一功能:统一返回格式+统一异常处理
spring·java-ee·状态模式·统一数据返回
小肥君19 天前
前端测试websocket
前端·websocket·状态模式
Wang's Blog19 天前
Java框架快速入门: Spring Security+OAuth2之前后端分离多模块工程配置
java·spring·状态模式
weixin_4935036721 天前
Vue3 前端生成 PDF:会员证书与活动签到表的三种打印方案与踩坑记录
前端·pdf·状态模式