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

Kubernetes部署Laravel API遇Nginx Ingress /api 404问题求助

排查Laravel API /api路径404问题的建议

针对根路径正常访问、/api路径返回404的问题,按以下步骤逐一排查:

  • 修正Ingress重写规则
    当前Ingress配置的nginx.ingress.kubernetes.io/rewrite-target: /会把所有请求路径强制重写为根路径,比如访问/api/users会被转发成/users,但Laravel的API路由默认前缀是/api,自然匹配不到对应路由。调整Ingress配置:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: backend-ingress
      # 若不需要路径重写,直接移除rewrite-target注解
      # annotations:
      #   nginx.ingress.kubernetes.io/rewrite-target: /$2
    spec:
      ingressClassName: nginx
      rules:
        - host: "your-host-ip"
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: backend
                    port:
                      number: 80
    

    若必须保留重写逻辑,可调整为:

    annotations:
      nginx.ingress.kubernetes.io/rewrite-target: /$2
    paths:
      - path: /api(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: backend
            port:
              number: 80
    
  • 验证Laravel API路由配置
    确认routes/api.php中的路由定义正确,示例:

    Route::get('/test', function () {
        return response()->json(['status' => 'success']);
    });
    

    同时检查.env文件中的APP_URL是否设置为你的域名/IP,确保路由生成时前缀匹配正确。

  • 检查容器内Nginx配置
    如果Laravel镜像使用Nginx作为Web服务器,确认Nginx配置包含正确的请求转发规则,确保所有路径(包括/api)都指向index.php:

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    

    缺少这条规则时,Nginx会尝试寻找/api对应的静态文件,找不到就返回404。

  • 直接在Pod内测试API
    跳过Ingress和Service,直接在Pod内部验证API是否正常:

    # 获取后端Pod名称
    kubectl get pods
    # 进入Pod并发起请求
    kubectl exec -it <backend-pod-name> -- curl localhost/api/test
    

    若这里返回404,问题出在Laravel应用本身(比如路由未加载、环境配置错误);若正常返回,问题则集中在Ingress的转发规则上。

  • 查看Ingress Controller日志
    查看Nginx Ingress Controller的日志,分析请求转发细节:

    # 获取Ingress Controller Pod(通常在ingress-nginx命名空间)
    kubectl get pods -n ingress-nginx
    # 查看日志
    kubectl logs -n ingress-nginx <ingress-controller-pod-name>
    

    日志会显示请求的原始路径、重写后的路径及转发状态,可快速定位Ingress规则问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:33:18