跳转到内容

IIS 请求过滤、上传限制与超时:413/504 到底卡在哪

核验于 1 分钟阅读

有意识地调整 IIS 请求限制、上传大小、URL/头限制和超时,并区分 413、404.13 与 504。

测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1
版本号
26100.33650
版本
Standard / Datacenter
架构
x64
支持
文档(E1)
证据
E1官方文档
核验日期
2026-10-29
页面类型
任务

三种限制,三种症状:

症状 层 设置
上传 413.1 / 连接重置 请求过滤 maxAllowedContentLength
404.13 请求过滤 处理器内容长度限制
404.15 请求过滤 查询串限制
400 / 错误请求 HTTP.sys URL/头大小、Host 格式
504 代理/应用超时 ARR/ANCM/应用超时
上传慢/断开 HTTP.sys minBytesPerSecond、connectionTimeout

不要把每个限制都改成“无限制”。每个都是 DoS 控制。

<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600"
maxUrl="4096"
maxQueryString="2048" />
<fileExtensions allowUnlisted="true" />
</requestFiltering>
</security>
</system.webServer>

maxAllowedContentLength 单位是字节(上面 100MB)。旧 ASP.NET maxRequestLength 单位是 KB,只作用于 ASP.NET 请求,不要混。

还要查处理器级限制(ASP.NET maxRequestLength、maxJsonLength)和反代 body 限制。

  • HTTP.sys/连接:connectionTimeout、headerWaitTimeout、minBytesPerSecond。
  • IIS 请求:serverRuntime requestTimeout(默认 00:02:00),长上传/导出可能要加。
  • 应用池:空闲超时不是请求超时;它停空闲工作进程。
  • ARR/ANCM/应用:上游超时;504 是前端等到放弃。

按最慢的合法请求设超时,不要“为了让 504 消失”设 30 分钟。长报表应该异步,不是长 HTTP 请求。

终端窗口
Get-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' `
-Filter 'system.webServer/security/requestFiltering/requestLimits' -Name '.'
curl.exe -I -H "Content-Length: 200000000" http://lab.local/upload

用略低于/略高于限制的文件测;查 IIS 日志 sc-status/sc-substatus 和失败请求跟踪。

  • 改了 maxAllowedContentLength,应用自己的限制还是 30MB。
  • 为一个慢报表把 requestTimeout 设 24 小时。
  • 为了“修”404.13 关掉请求过滤。
  • 忘了反代的 client_max_body_size/ARR 限制。
  • 调试时记录整个请求体。

E1。实验室没有制造 413/504,也没有改这些限制;命令和状态表是 Server 2025 的验证计划。

来源