本文主要是介绍上传文件超过1Mb,返回413错误,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
近期手头上有一个项目在整体上云,期间遇到一个Cloud storage上传文件超过限制的问题,在此记录一下。
背景是:IBM Cloud的K8s + PersistentVolumeClaim + Webdav + Ingress(Nginx)
详细情况是 有许多项目部署在K8s集群上,并且用PersistentVolumeClaim(大小为20G)做为一块虚拟的磁盘,存储项目中需要用到的一些静态文件;并且在集群中的PVC之上通过webdav协议,提供了外部的读写能力(主要是通过Cyberduck等软件进行上传文件的功能);最后使用了Ingress作了地址的映射。
在实际的使用过程中发现一个问题,通过Cyberduck上传文件时,小于1Mb的文件能上传成功,但是大于1Mb的文件会返回413错误(413 Request Entity Too Large)。
通过调研,排除了PersistentVolumeClaim和webdav对文件大小的限制,最终发现nginx有相关的设置:
client_max_body_size
该设置规定了文件大小,默认是1Mb。
最终找到了Ingress的annotations里,ingress.kubernetes.io/proxy-body-size对应的设置就是nginx的 client_max_body_size,于是在ingress.yaml中加上了如下配置:
annotations:ingress.bluemix.net/client-max-body-size: 64m
由于我们的环境装的IBM Cloud,查阅annotation的具体配置方法可以参考https://console.bluemix.net/docs/containers/cs_annotations.html#ingress_annotation
对其他版本的Ingress,需要配置
annotations:ingress.kubernetes.io/proxy-body-size: "50m"
或者
annotations:nginx.ingress.kubernetes.io/proxy-body-size: "50m"
It works!
写在最后:
1. 改完yaml文件配置别忘了重新apply。
2. 与client_max_body_size类似的nginx设置还有client_header_timeout, client_body_timeout, proxy_connect_timeout等,感兴趣的小伙伴可以自行研究。
这篇关于上传文件超过1Mb,返回413错误的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!