服务器返回 413 Request Entity Too Large

文章讲述了在Docker环境中,上传大于1.5M文件时报413RequestEntityTooLarge错误,经过排查确定问题在代理层的nginx-proxy。解决方法是在宿主机创建my_custom.conf文件并调整client_max_body_size,然后挂载到nginx-proxy容器中,以确保上传限制的更改生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

上传一个大于1.5M的文件时,报错:413 Request Entity Too Large

使用的配置

1、用的是docker环境,还有一层代理,代理用的镜像是:jwilder/nginx-proxy

2、docker里是有php和nginx

确认配置

docker里的php和nginx都配置了上传的限制是20M以上,包括请求超时时间也是很长

nginx:

 php.ini

 

解决思路

1、docker里的nginx和php确认已经配置了上传限制是20M以上,并且docker里的nginx和php都没有错误日志,那说明请求就没有走到docker里的环境,应该在代理层被拦截了,

2、排查代理容器:jwilder/nginx-proxy,发现其nginx没有配置:client_max_body_size的大小,说明走的是默认的,chatgtp查了下默认的大小

3、这样基本确认是代理的问题了。

解决方法 

1、本地增加一个文件【/www/privdata/my_custom.conf】,文件里增加内容

client_max_body_size 10M;

2、创建容器时挂载这个my_custom.conf文件到容器的/etc/nginx/conf.d/目录下。如:

docker run -d -p 80:80 --name=nginx-proxy --net=nginx-proxy --restart always -v /var/run/docker.sock:/tmp/docker.sock -v /www/privdata/my_custom.conf:/etc/nginx/conf.d/client_max_body_size.conf:ro jwilder/nginx-proxy

注意:这边是挂载文件到容器里指定目录的某个文件,需要确保宿主机的文件夹已经被共享到容器里。不然会导致宿主机的文件夹没有权限,导致挂载的时候会是一个目录,最终代理出错

 我用的是colima,colima start --edit 时可以看大/www/privdata 已经被挂载到容器里了。

 至于linux上docker 忘记之前怎么设置挂载目录了,加的时候已经有权限了,所以直接执行就行

### 解决 Windows 服务器 IIS 413 请求实体过大问题 对于在 Windows 服务器上的 Internet Information Services (IIS) 遇到的 `413 Request Entity Too Large` 错误,可以通过调整配置来增大允许上传的最大文件尺寸。 #### 调整 ASP.NET 设置 为了增加通过应用程序框架(如 .NET)提交的内容长度限制,在 web.config 文件中的 `<system.web>` 下设置 `maxRequestLength` 属性可以实现这一点。例如: ```xml <configuration> <system.web> <!-- 将最大请求长度设为6MB --> <httpRuntime maxRequestLength="6291453" /> </system.web> </configuration> ``` 这一步骤适用于基于 ASP.NET 的应用,并且该属性是以KB为单位定义的[^4]。 #### 修改 IIS 配置 除了上述针对特定编程环境的做法外,还需要考虑更广泛的 IIS 级别的设定。可以在同一配置文件内的 `<system.webServer>` 中加入如下节点以提升整个站点接受数据包的能力: ```xml <security> <requestFiltering> <!-- 单位字节;这里设置了大约8GB的最大限制 --> <requestLimits maxAllowedContentLength="8589934592"/> </requestFiltering> </security> ``` 此处的关键在于 `maxAllowedContentLength` 参数,它决定了客户端能够发送给服务器的最大内容量,其值同样采用的是字节数形式表示[^1]。 #### 更新 metabase.xml 或者使用命令行工具 如果是在较旧版本的操作系统或者特殊情况下,则可能涉及到直接编辑位于 `%windir%\System32\inetsrv\metabase.xml` 文件里的相应参数,比如修改 `ASPMaxRequestEntityAllowed` 值至所需大小并重启相关服务[^2]。不过这种方法现在较少被推荐,因为现代版次的 IIS 提供了更加简便的方式来进行这些更改。 #### 应用程序层面的优化建议 考虑到性能因素以及安全性考量,适当评估实际业务需求后再做决定是非常重要的。过高的上限虽然解决了当前的问题,但也增加了潜在风险和资源消耗的可能性。因此,合理规划预期接收的数据规模有助于构建稳定高效的Web服务平台[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值