在cloudflare上运行一个很长的PHP脚本给了我一个超时(使用nginx)


Running a long PHP script on cloudflare gives me a timeout (using nginx)

我正在使用nginx + cloudflare。我运行一个很长的 php 脚本,在完成之前应该需要 1-2 分钟并重定向到另一个页面。完全运行后,Cloudflare 给我一个超时发生。这是我目前在nginx.conf上的设置;

client_body_timeout 12;
client_header_timeout 12;
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;
keepalive_timeout 15;
send_timeout 10;
types_hash_max_size 2048;
fastcgi_connect_timeout 600;
fastcgi_send_timeout 600;
fastcgi_read_timeout 600;

而我的 php.ini 已经将max_execution_time设置为 300;

在这里错过了什么,我该怎么做才能使 cloudflare 能够运行这个 php 脚本而不会让我的服务器在此过程中超时?

我通过执行多个重定向来解决此类问题:

  • 请求进入 URL - 启动后台作业
  • 60 秒后重定向到 URL?stage=2
  • 60 秒后重定向到 URL?stage=3

  • 作业运行时,每 60 秒重定向到 URL?stage=N

  • 作业完成后,重定向到最终到达网址

虽然我没有使用PHP和Nginx,所以不确定这是否也适用于你。

一种解决方案是重定向到阶段,正如@Andrejs所写。其他情况可能是:

  • 使用函数 ignore_user_abort(true) 启动主脚本。这不会在 http 超时时取消脚本。脚本完成后,在数据库中插入行或创建一些文件。
  • 在前端进行定期 ajax 调用,而在服务器端出现新的数据库记录或创建新文件。
  • 如果检测到操作已完成,请将用户重定向到下载文件或显示某些信息。