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

如何基于路径配置ingress-nginx的分块传输与负载大小?

针对Ingress-Nginx特定端点配置大请求与分块传输的方案

要实现仅对部分API端点开放大文件传输和分块传输,避免全局宽松配置带来的攻击风险,有两种直接可行的方案:

方案一:拆分Ingress资源(推荐,配置更清晰)

将需要特殊配置的路径单独创建为一个Ingress资源,仅为该Ingress添加宽松的传输配置;其余路径保留在原有Ingress中,使用默认的严格请求限制。

原有Ingress(严格配置,适用于大多数端点)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-frontend-strict
  # 不添加大请求相关注解,使用Nginx默认的proxy-body-size(通常为1m)和缓冲配置
spec:
  rules:
    - host: apply-ingress-hostname-patch-here
      http:
        paths:
          - path: /api/orgs/v1
            pathType: Prefix
            backend:
              service:
                name: organisations
                port:
                  number: 80
          # 其他不需要特殊配置的路径都放在这里
          # ... more paths follow

专属Ingress(宽松配置,仅针对需要大文件的端点)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-frontend-large-files
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: 1g
    nginx.ingress.kubernetes.io/server-snippet: |
      chunked_transfer_encoding on;
      proxy_buffering off;
      proxy_request_buffering off;
      proxy_max_temp_file_size 0;
spec:
  rules:
    - host: apply-ingress-hostname-patch-here
      http:
        paths:
          - path: /api/lines/v1
            pathType: Prefix
            backend:
              service:
                name: linejsonfiles
                port:
                  number: 80

说明:Ingress-Nginx会自动合并同一主机下的多个Ingress规则,路径匹配遵循最长前缀优先原则,确保规则生效顺序正确。

方案二:在单个Ingress中通过Location块精准配置

如果不想拆分Ingress,可以在全局Ingress的server-snippet中,通过Nginx的location块匹配特定路径,覆盖全局配置。全局保持严格限制,仅匹配到的路径启用宽松传输规则。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-frontend
  annotations:
    # 全局设置严格的请求体大小限制(默认1m,可按需调整)
    nginx.ingress.kubernetes.io/proxy-body-size: 1m
    nginx.ingress.kubernetes.io/server-snippet: |
      # 全局保持默认缓冲配置,兼顾内存友好性与大请求拦截
      proxy_buffering on;
      proxy_request_buffering on;
      
      # 针对特定路径覆盖配置
      location ~^/api/lines/v1 {
        # 允许大请求体
        client_max_body_size 1g;
        # 启用分块传输,关闭缓冲
        chunked_transfer_encoding on;
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_max_temp_file_size 0;
        
        # 必须添加proxy_pass指令,保证请求能正确转发到后端服务
        proxy_pass http://$service_name:$service_port;
      }
spec:
  rules:
    - host: apply-ingress-hostname-patch-here
      http:
        paths:
          - path: /api/orgs/v1
            pathType: Prefix
            backend:
              service:
                name: organisations
                port:
                  number: 80
          - path: /api/lines/v1
            pathType: Prefix
            backend:
              service:
                name: linejsonfiles
                port:
                  number: 80
          # ... more paths follow

说明:

  • 使用~^/api/lines/v1正则匹配确保前缀路径的精准匹配;
  • 全局配置保持严格,仅目标路径启用宽松规则,有效缩小攻击面;
  • proxy_pass指令是必填项,否则Nginx无法完成请求转发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:32:01