nginx 504 (Gateway Time-out)
目录
1. 后端处理超时
2. Nginx 代理超时设置不足
3. 服务未响应或崩溃
4. 请求体过大
5. 重启nginx
原本代理服务器用的是微软的Kestrel ,今天给项目换用了nginx,然后有个接口请求报了
(504 Gateway Timeout)
请求发送到了服务端,但服务端未能在规定时间内返回结果(504 Gateway Timeout)。这个错误通常与以下几个问题相关:
1. 后端处理超时
-
后端 API 执行耗时过长,超过了 Nginx / Kestrel / 反向代理 或 客户端 设置的 timeout 时间。
-
解决方案:
-
检查该接口处理图片的逻辑是否可能因图片过大、模型推理耗时过久等导致延迟。
-
检查后端接口是否设置了合理的超时时间(例如 ASP.NET Core 的
KestrelServerLimits
)。 -
查看日志
Program.cs
、控制台或文件中是否出现超时、线程挂起等异常。
-
2. Nginx 代理超时设置不足
-
Nginx 作为反向代理时,对后端响应设置了太短的超时时间。
-
解决方案:在 Nginx 配置中加上如下设置:
location /api/ {proxy_pass http://localhost:5000;proxy_read_timeout 300;proxy_connect_timeout 300;proxy_send_timeout 300;
}
3. 服务未响应或崩溃
-
服务程序挂掉了、死循环或卡住。
-
解决方案:
-
检查
dotnet run
或部署日志,看是否程序在处理图像过程中报错。 -
你可以临时在接口里加日志,看是不是到某一步卡住了。
-
4. 请求体过大
-
上传的图片过大,而
Kestrel
/ Nginx / ASP.NET Core 的RequestSizeLimit
过小。 -
解决方案:
-
增加上传大小限制,例如在 ASP.NET Core 中:
-
app.Use(async (context, next) =>
{context.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = 104857600; // 100MBawait next.Invoke();
});
5. 重启nginx
-
重启 Nginx:
nginx -s reload