You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

EKS集群中Nginx Ingress Controller的WordPress大文件上传问题

大文件上传失败问题排查与解决方案

我来帮你梳理下这个大文件上传失败的问题——核心问题应该出在Ingress注解的使用上,你混用了不同Nginx Ingress项目的配置注解,导致部分限制规则没有被正确识别生效。

1. 修正Ingress注解前缀

官方维护的Nginx Ingress Controller(就是你集群里用的这个)只识别nginx.ingress.kubernetes.io/前缀的注解,而你当前配置里用了nginx.org/(属于另一个Nginx Kubernetes Ingress项目)和旧版的ingress.kubernetes.io/前缀,这些注解不会被你的Ingress Controller解析,自然起不到限制作用。

比如你设置的nginx.org/client-max-body-size: "50m"其实完全没生效,正确的写法应该是nginx.ingress.kubernetes.io/proxy-body-size: "50m",而且你重复设置了这个参数,需要统一。

2. 修正后的Ingress配置

把所有注解替换为正确的前缀,调整后的配置如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: "50m"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "30s"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "20s"
  name: wordpress
  namespace: test
spec:
  rules:
  - host: test.mrcartr.nl
    http:
      paths:
      - backend:
          serviceName: wordpress-mrcartr
          servicePort: 80
        path: /

3. 验证配置是否生效

修改Ingress后,你可以进入Nginx Controller的Pod,查看实际生成的Nginx配置文件,确认规则是否生效:

# 替换成你的Ingress Controller Pod名称
kubectl exec -it <nginx-ingress-controller-pod-name> -n ingress-nginx -- cat /etc/nginx/nginx.conf

在文件里搜索client_max_body_size,看是否已经设置为50m,同时检查proxy_connect_timeout等参数是否正确加载。

4. 额外排查点

  • 查看POST请求日志:你当前提供的日志只有GET请求,上传文件是POST请求,建议过滤查看POST请求的日志,确认是否出现413 Request Entity Too Large错误:
    kubectl logs <nginx-ingress-controller-pod-name> -n ingress-nginx | grep POST
    
  • ELB超时设置:虽然你跳过Ingress后正常,但ELB的空闲超时时间也可能影响大文件上传,建议将ELB的idle timeout设置为60秒以上,避免上传过程中连接被断开。

5. 全局配置补充(可选)

如果你想让所有Ingress都继承大文件上传限制,可以在nginx-configuration ConfigMap中添加全局设置:

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
data:
  use-proxy-protocol: "false"
  use-forwarded-headers: "true"
  proxy-body-size: "50m"  # 添加全局代理体大小限制

注意:Ingress级别的注解优先级高于ConfigMap的全局设置。

内容的提问来源于stack exchange,提问作者Adriano S. Fonseca

火山引擎 最新活动