AWS EKS ALB Ingress遇413请求实体过大问题求解决
解决AWS EKS ALB Ingress下Laravel API上传文件413错误
问题原因
你当前使用的是AWS ALB Ingress Controller,但Ingress配置中添加了Nginx Ingress专属的注解nginx.ingress.kubernetes.io/proxy-body-size: 100m,这个注解对ALB完全无效。AWS ALB默认的最大请求体大小为1MB,当上传文件超过这个限制时,ALB会直接拦截请求并返回413 Request Entity Too Large,请求根本不会到达后端Laravel服务,所以PHP日志中没有记录。
解决方案
1. 修改Ingress配置,添加ALB专属的请求体大小限制注解
将配置中的nginx.ingress.kubernetes.io/proxy-body-size: 100m替换为ALB Ingress Controller支持的注解:
alb.ingress.kubernetes.io/max-body-size: "104857600"
(注:值为字节数,104857600等于100MB;部分版本的ALB Controller也支持直接使用"100M"格式)
修改后的完整Ingress配置示例:
--- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/max-body-size: "104857600" # 新增:限制最大请求体为100MB labels: app: appapi name: app-ingress namespace: app spec: rules: - http: paths: - backend: service: name: app-service port: number: 80 path: /* pathType: ImplementationSpecific
2. 更新Ingress资源
执行kubectl命令应用修改后的配置:
kubectl apply -f your-ingress-file.yaml -n app
3. 等待ALB配置生效
ALB Controller需要几分钟时间更新负载均衡器的配置,可通过AWS控制台查看ALB状态,确认配置更新完成。
4. 验证后端Laravel配置(可选但建议)
虽然当前问题由ALB拦截导致,但为避免后续后端层面的限制,确保Laravel所在PHP环境配置了足够大的上传限制:
- 修改
php.ini中的upload_max_filesize = 100M和post_max_size = 100M - 重启PHP-FPM或相关服务
内容的提问来源于stack exchange,提问作者rholdberh
相关产品推荐
相关产品推荐

