如何使用 nginx 控制器根据位置配置 client_max_body_size

如何使用 nginx 控制器根据位置配置 client_max_body_size

我需要client_max_body_size在我的配置文件中配置特定位置,Ingress然后才是默认值。如何做到这一点?我查看了文档,但没有找到任何内容。我不想全局执行此操作。

此外,如果我使用注释,它将用于所有路径,我只希望它用于特定的路径。

  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "4m"
location /upload-path {
  client_max_body_size 6M;
}

答案1

按照Nginx 文档,可以client_max_body_size分3个部分设置:

  • http,
  • 服务器,
  • 地点

nginx ingress controller请设置此值,您必须在pod中更改它,确切地说是在 中/etc/nginx/nginx.conf

下面的例子:

$ kubectl exec -ti <ingres-controller-pod> /bin/bash

$ kubectl exec -ti nginx-ingress-controller-6b85b64f49-rwxlf /bin/bash

编辑 nginx.conf 文件。

$ vi /etc/nginx/nginx.conf

在我的示例中,来自入口的主机名是my.pod.svc

现在你需要找到server文件的正确部分。你可以搜索它,因为它会像下面这样被注释掉。

## start server <your host name from ingress>

如下所示:

 ## start server my.pod.svc                    
        server {                                                   
                server_name my.pod.svc ;   
...

现在您必须找到正确的位置。在本例中,它将是/pod

 location ~* "^/pod" {                                                                                                          

                        set $namespace      "default"; 

您必须在此处指定该值。

默认是2M,修改的时候别忘了;

有类似的帖子堆栈溢出。在该主题中,您还可以找到另一个示例的链接这里

完成此更改后,您将需要重新加载 nginx。

编辑:

另一个选项(OP 在这种情况下使用)是使用annotation

客户端主体的最大大小

nginx.ingress.kubernetes.io/proxy-body-size: 8m

这样它将应用整个集群。

可以使用的另一个注释是configuration_snippet 注释对于此示例,仅将大小设置为/upload-path,它看起来像:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
   name: nginx-snippet
   annotations:
      nginx.ingress.kubernetes.io/configuration-snippet: |

      location /upload-path {

           client_max_body_size 8M;  
      }

相关内容