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
相关产品推荐
相关产品推荐

