You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx配置location代理多端口应用时/api路径返回404如何解决?

配置存在的问题

你遇到的404问题是由3个疏漏共同导致的:

  1. 语法错误:location / 块未闭合
    原配置中location /的规则写完后没有添加闭合的},导致/api的location块被Nginx解析为location /的嵌套子规则,所有请求都会先执行location /下的try_files逻辑,根本不会触发/api的转发规则。
  2. 路径转发规则错误
    原配置的proxy_pass http://localhost:8085末尾没有加斜杠,转发时会把完整的/api/xxx路径直接传给后端服务,如果你的Spring Boot接口没有统一加/api前缀,后端收到的请求路径和实际接口不匹配,就会返回404。
  3. Docker容器网络访问错误
    你的前后端和Nginx都运行在Docker容器中,配置里的localhost指向的是Nginx容器自身的本地端口,无法访问到宿主机或者Spring Boot容器的8085端口。

修正后的配置

server {
    listen 80;
    listen [::]:80;
    server_name xyz.com;

    location / {
        root /var/www/site;
        try_files $uri $uri/ /index.html;
    } # 补全原配置缺失的闭合大括号

    # ^~ 标记保证/api前缀的请求优先匹配当前规则,不被前端规则覆盖
    location ^~ /api/ {
        # 同Docker网络下可替换为Spring Boot容器的服务名,如http://springboot-app:8085/
        # 宿主机端口映射场景下Windows/Mac可填http://host.docker.internal:8085/
        # Linux宿主机可填http://宿主机局域网IP:8085/
        proxy_pass http://localhost:8085/; # 末尾加斜杠,转发时自动去掉/api前缀
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

验证步骤

配置修改完成后执行nginx -t检查语法是否正确,确认无误后执行nginx -s reload重载配置即可生效。


内容的提问来源于stack exchange,提问作者Raiyesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 21:24:01