配置AddRequestTimeouts后仍出现504网关超时问题求助
解决ASP.NET Core AddRequestTimeouts未生效,提前返回504网关超时的问题
你遇到的HTML格式504网关超时页面,并非ASP.NET Core AddRequestTimeouts组件的默认响应(该组件超时后默认返回408 Request Timeout状态码,而非HTML页面),说明超时是由应用前端的代理/网关服务器触发的,而非你配置的应用内部超时策略。
1. 排查并调整前端代理/网关的超时设置
根据你的部署环境,修改对应组件的超时配置:
IIS托管:
编辑项目的web.config,在aspNetCore节点添加requestTimeout属性,设置为你需要的超时时间(比如10分钟):<aspNetCore processPath="dotnet" arguments=".\YourApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" requestTimeout="00:10:00" />同时检查IIS站点的「高级设置」→「连接超时」,确保数值大于业务超时时间。
Nginx反向代理:
在Nginx配置文件的location块中,添加/修改proxy_read_timeout参数:location / { proxy_pass http://your-app-address; proxy_read_timeout 600s; # 设置为10分钟 proxy_connect_timeout 60s; }云平台托管(如Azure App Service):
- Azure:进入App Service门户→「配置」→「常规设置」,调整「请求超时」时间(默认230秒,最大可设为86400秒)。
- AWS:调整Application Load Balancer的「空闲超时」(默认60秒),或修改Elastic Beanstalk的Nginx配置。
2. 验证应用内部超时策略是否正常
暂时绕过前端代理,直接访问应用的本地/直连端口(如http://localhost:5000/import-file),模拟一个超过5分钟的请求,确认是否返回ASP.NET Core的408响应。如果返回408,说明你在Program.cs和控制器中的配置本身是正确的。
3. 确认中间件顺序(你的配置已正确)
你的Program.cs中UseRequestTimeouts的顺序符合要求:它必须在UseRouting之后、MapControllers之前,这部分无需调整。
内容的提问来源于stack exchange,提问作者Vagner Miv




