关于IIS上传限制的快速解决办法
- 2023-06-08
- 2144
- 飞驰的心
网上文章一大抄,有的是装模做样的图文并茂,有的是恨不得从石器时代开始给你讲起,绕来绕去不说正题,下面我把这个问题写个说明,方便各位新手备查:
1、IIS7以后修改上传文件大小只需要修改站点下的web.config文件即可,不需要你去windows\system32\inetsrv下折腾那该死的iis配置文件。
2、IIS界面中也能配置上传文件大小,配置最终都会保存在web.config里,所以为了移植方便、为了配置方便,所以建议你直接修改web.config。
以上就是逻辑,以下是方法——
打开web.config
1、找到system.web下的httpRuntime节点,加入maxRequestLength属性(请注意:这个属性数值以Kb为单位):
《httpruntime maxrequestlength="1048576" executionTimeout="3600"》
2、找到system.webServer下的security下的requestFiltering节点,加入requestLimits节点,如下(请注意:这个节点的数值以字节为单位):
《system.webserver> 《security> 《requestfiltering> 《requestlimits maxallowedcontentlength="1073741824"> 《/requestlimits> 》
按我上面的数值配置好以后,IIS当前站点就支持1Gb的上传附件了,如果需要更大或更小,自己手动调节数值即可,记住一个是Kb一个是字节,一定要注意换算。和IIS上传限制有关的问题,这是唯一且最终的解决办法,如果你还是上传有问题,那就是你web程序本身(.Net、MVC、PHP)可能有某种限制。
归纳起来一共有三个重要的设置点:
1、maxrequestlength="1048576" 以Kb为单位 设置当次请求的数据包大小,1048576Kb即1Gb
2、maxallowedcontentlength="1073741824" 以字节为单位,设置允许请求的内容大小,1073741824换算完即1Gb
坦白地说他两个有什么区别我也不清楚,但必须配套设置才能起作用,第三个设置点其实是个坑——
3、executionTimeout="3600" 超时时间,我设置的值是3600秒,也就是1小时。
之所以说超时时间设置是个坑,原因有2:其一是很多人不设置这个属性,那么IIS就执行默认设置,默认超时大约是20分钟,但特别强调的是这个20分钟还是个"弹性"时间,如果此时服务器内存占用较高,IIS的回收机制启动,它会随时掀翻这个20分钟超时的桌子。所以这个20分钟超时是完全不可信的,这就解释了很多人网站的session可能几分钟就失效,因为iis回收就相当于重启了应用程序池,一切内存中的数据都灰飞烟灭。
当你手动设置了executionTimeout属性后,IIS的自动回收机制才会收敛,至少它不会在你超时限定的时间内回收,这样也就保障了你上传时候的这条链路的畅通。用户大多数都是家用宽带,上行很小,假设上行一个1Gb的电影,还没上传完iis就回收了,不失败才怪。
众爱卿,道理有没有彻底明白? 跪安吧!
评论
全部评论
共{{commentCount}}条{{rs.Msg_Content}}