You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EC2部署Sendy发信时Nginx报504超时错误如何解决?

Sendy 504网关超时与Nginx崩溃故障解决方案

配置超时参数

  • Nginx侧配置
    编辑对应站点的Nginx配置文件(默认路径/etc/nginx/sites-available/你的站点配置),在处理Sendy请求的location块中添加以下配置:
    proxy_connect_timeout 600s;
    proxy_send_timeout 600s;
    proxy_read_timeout 600s;
    fastcgi_read_timeout 600s;
    fastcgi_send_timeout 600s;
    send_timeout 600s;
    
    执行nginx -t校验配置无语法错误后,运行systemctl reload nginx生效。
  • PHP运行环境配置
    编辑php.ini配置文件(路径随PHP版本不同有差异,可通过php --ini查找),修改以下参数:
    max_execution_time = 600
    memory_limit = 512M
    
    若使用PHP-FPM,还需编辑对应池配置(默认路径/etc/php/[版本号]/fpm/pool.d/www.conf),添加或修改request_terminate_timeout = 600,修改后执行systemctl reload php[版本号]-fpm重载服务。

修复文件描述符限制不足问题

你观察到的open socket left及aborting报错,核心原因是Nginx worker进程的最大打开文件句柄数限制被打满,导致进程异常崩溃:

  • 全局永久调整句柄限制:编辑/etc/security/limits.conf,新增2行配置:
    * soft nofile 65535
    * hard nofile 65535
    
  • 单独调整Nginx服务的句柄限制:编辑Nginx的systemd服务配置文件,在[Service]段落添加LimitNOFILE=65535,执行systemctl daemon-reload && systemctl restart nginx生效。
  • 验证配置:执行cat /proc/$(cat /var/run/nginx.pid)/limits | grep "Max open files",确认输出的软、硬限制均为65535即可。

适配AWS环境优化Sendy发信逻辑

  • 改用CLI模式触发发信任务,避免Web请求受Nginx超时限制:在crontab中添加定时任务,每分钟执行一次Sendy的调度脚本,样例如下:
    * * * * * www-data php /var/www/sendy/scheduled.php > /dev/null 2>&1
    
  • 下调Sendy单批发信数量:在Sendy后台设置中将单次发信批次调整为50~100,降低单次任务的执行时长与资源消耗。
  • 检查AWS侧配置:确认RDS的最大连接数配置足够、EC2到RDS的安全组规则没有限制连接时长、EC2的出站规则允许发信端口(25/465/587)的请求。

效果验证

发起小批量发信测试,确认不再返回504错误,查看Nginx错误日志无aborting类告警即可。

内容的提问来源于stack exchange,提问作者COdeingNinja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:51:03