You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

配置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

火山引擎 最新活动