Kubernetes nginx ingress:仅为一个子域设置client_max_body_size

0yycz8jy  于 2023-04-29  发布在  Nginx
关注(0)|答案(2)|浏览(423)

如何为单个子域设置client_max_body_size参数?我有一个服务器,将接受文件上传高达5TB。我看过的所有例子都向您展示了如何全局设置它。我的入口有多个规则。yaml,我不希望每个规则都继承client_max_body_size参数,只有文件上传服务器应该继承。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          serviceName: homepage
          servicePort: 80
  - host: storage.example.com
    http:
      paths:
      - backend:
          serviceName: storage
          servicePort: 80

在上面的入口。yaml,我想只为storage服务设置client_max_body_size,该服务位于主机storage.example.com上。

rqcrx0a6

rqcrx0a61#

ingress-nginx的最新版本中,有一个专用于入口资源的注解,称为nginx.ingress.kubernetes.io/proxy-body-size

metadata:
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: 5tb

如果使用this answer中的configuration-snippet,当前将导致如下错误:

[emerg] 551#551: "client_max_body_size" directive is duplicate in /tmp/nginx/nginx-cfg123:321
nginx: [emerg] "client_max_body_size" directive is duplicate in /tmp/nginx/nginx-cfg123:321
nginx: configuration file /tmp/nginx/nginx-cfg123 test failed
vfwfrxfs

vfwfrxfs2#

因为我在list of annotations上看不到client-max-body-size,所以我相信你必须使用custom-config-snippet来包含该Ingress的client_max_body_size 5tb;

metadata:
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      client_max_body_size 5tb;

但是,鉴于您说过只希望它用于storage.example.com,您需要将storage.example.com的Ingress配置拆分到其自己的Ingress资源中,因为(AFAIK)注解应用于Ingress资源中的每个host:记录。

相关问题