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

如何解决ingress-nginx特定路径配置client_max_body_size后的503错误?

解决ingress-nginx路径自定义client_max_body_size导致的503错误

你遇到的问题根源在于NGINX的嵌套location规则:当你在父location /里嵌套location /api/upload-endpoint时,这个子location不会自动继承父级的grpc_pass上游转发配置,所以请求匹配到子location后,NGINX不知道该把请求转发到哪里,直接返回503。而return 403能生效是因为这个指令不需要依赖上游,直接就能返回响应。

给你两种可行的解决方案:

方案1:在嵌套location中显式指定上游转发

修改configuration-snippet注解,在子location里加上和父级一致的grpc_pass指令:

metadata:
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      location /api/upload-endpoint {
        client_max_body_size 16M;
        grpc_pass grpc://upstream_balancer;
      }

这样NGINX匹配到该路径时,既会应用自定义的body大小限制,也知道要把请求转发到正确的上游。

方案2:用路径级Ingress规则单独配置

把/api/upload-endpoint单独拆成一条Ingress路径规则,直接在该路径上添加client-max-body-size注解,这种方式更符合Ingress的设计规范:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/client-max-body-size: 1M # 全局默认大小
spec:
  rules:
  - host: your-domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service-name
            port:
              name: http
      - path: /api/upload-endpoint
        pathType: Prefix
        backend:
          service:
            name: my-service-name
            port:
              name: http
        annotations:
          nginx.ingress.kubernetes.io/client-max-body-size: 16M # 该路径单独配置

这种方式不需要手动写NGINX的location块,由Ingress Controller自动生成正确的配置,避免嵌套location带来的问题。

注意:路径级注解需要你的ingress-nginx Controller版本支持(一般v0.29+以上版本都支持),如果版本较旧,优先用方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:52:40