如何让前端axios请求支持等待NodeJS返回的2分钟长响应
问题根因
你遇到的504错误是网关超时,问题出在你架构中间层的Nginx服务,它的默认请求超时时间为60秒,你此前只调整了前端axios、Node服务的超时配置,漏掉了Nginx的超时参数调整,因此请求到1分钟时Nginx会主动断开连接,向前端返回504状态码。
解决方案
1. 调整Nginx代理超时配置
编辑你的Nginx站点配置文件,在转发到Node服务的location配置块中新增3个超时参数,将超时时间调整为10分钟(600秒),适配你的业务场景:
location / { proxy_pass http://127.0.0.1:你的Node服务端口; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 新增超时配置,单位为秒 proxy_connect_timeout 600s; proxy_send_timeout 600s; proxy_read_timeout 600s; }
配置修改完成后,先执行nginx -t检查配置语法是否正确,确认无误后执行nginx -s reload重载配置即可生效。
2. 修正Express超时配置(可选,兼容高版本Express)
app.timeout参数在Express 4.x及以上版本已经被废弃,建议替换为服务实例级别的超时设置,避免配置不生效:
// NODE / EXPRESS SERVER const server = app.listen(port, () => { console.log(`${portalStatus} NodeJS Listening on port ${port}`) }); // 设置服务连接超时为10分钟 server.setTimeout(10 * 60 * 1000);
3. 其他排查项
如果调整Nginx配置后问题仍存在,检查你服务器链路中是否还有其他中间层:比如CDN、WAF、云服务商负载均衡等,这类产品默认超时也多为60秒,需要同步调整对应超时参数。
完成以上配置后,你的1分20秒的长请求就可以正常返回结果了。
内容的提问来源于stack exchange,提问作者Nilebac
相关产品推荐
相关产品推荐

