AWS EC2部署Laravel多次访问URL触发Error 520报错解决方案咨询
AWS EC2部署Laravel访问触发Cloudflare 520错误根治方案
问题现象
部署在AWS EC2上的Laravel项目,多次访问URL时触发Error 520 Web server is returning an unknown error报错,清除浏览器Cookie后可暂时恢复,无法通过临时清Cookie的方案适配生产使用场景。
根因定位
520是Cloudflare边缘节点无法解析源站合法HTTP响应时返回的错误,清Cookie可临时恢复说明问题核心与请求携带的Cookie体积、源站Cookie处理逻辑直接相关,不属于网络连通性故障,常见触发点为Web服务器头缓冲区不足、Laravel Cookie/Session配置异常、PHP返回畸形响应三类。
根治操作步骤
- 调整Web服务头缓冲区配置
绝大多数该场景的520错误都是大Cookie触发Web服务器默认头缓冲区上限,返回空响应或截断响应导致:- 若使用Nginx作为Web服务,在对应站点的server配置块中添加以下参数:
配置修改后执行large_client_header_buffers 4 16k; client_header_buffer_size 4k; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k;nginx -t校验语法无报错,执行systemctl reload nginx重载配置生效。 - 若使用Apache作为Web服务,在站点配置中添加以下参数:
修改后执行LimitRequestFieldSize 16384 LimitRequestLine 16384systemctl reload httpd重载配置生效。
- 若使用Nginx作为Web服务,在对应站点的server配置块中添加以下参数:
- 修复Laravel侧Cookie与Session配置缺陷
- 打开
config/session.php检查驱动配置,默认cookie驱动会将全量Session数据加密后存储在客户端Cookie中,单Cookie体积超过4KB就极易触发头超限问题,若业务Session存储数据量较大,将驱动改为redis或database,避免客户端Cookie持续膨胀。 - 校验同文件内
domain、secure、same_site参数,确保和实际访问域名、HTTPS配置匹配,参数配置错误会导致Cookie循环写入、体积持续叠加的问题。 - 排查全局中间件、路由中间件中的Cookie操作逻辑,删除重复写入Cookie、无意义追加Cookie内容的代码,避免每次请求都往Cookie里追加冗余数据。
- 打开
- 排查PHP运行时异常
- 检查php.ini配置,将
output_buffering参数设置为4096,避免PHP输出内容时提前发送头导致响应格式异常。 - 调整PHP-FPM池配置中的
request_terminate_timeout参数,不要设置为低于30s的过短阈值,避免脚本未完成响应就被进程强制终止,返回截断的畸形响应。 - 查看Laravel日志
storage/logs/laravel.log与Web服务错误日志,定位520报错对应时间点是否存在headers already sent类报错,这类报错会直接导致HTTP响应头格式非法,Cloudflare无法解析就会返回520。
- 检查php.ini配置,将
- 校验Cloudflare侧配置
- 检查Cloudflare转换规则、源站规则中是否配置了过多的请求/响应头重写、Cookie重写逻辑,规则叠加会额外增加请求/响应头体积,触发缓冲区上限。
- 临时开启Cloudflare开发模式复现问题,通过Cloudflare源站日志查看520对应的子错误码,可直接定位是响应头过大、响应为空还是头格式非法的具体问题。
验证方法
配置调整完成后,构造携带大体积Cookie的请求直接访问EC2源站IP,确认源站可正常返回200响应后,再通过绑定Cloudflare的域名访问,连续刷新10次以上无520报错即为修复完成。
内容的提问来源于stack exchange,提问作者Jignesh Prajapati
相关产品推荐
相关产品推荐

