我无法避免 504 网关超时

我无法避免 504 网关超时

为了避免 nginx 504 网关超时,我尝试在 PHP 代码开始时执行以下操作:

set_time_limit(0);

另外,我尝试提高时间设置/etc/php/7.0/fpm/php.ini

max_execution_time = 3600
max_input_time = 3600

以及/etc/php/7.0/fpm/pool.d/www.conf

request_terminate_timeout=3600

重新启动 nginx 后,我在请求 3600 秒之前仍然收到 504 网关超时错误。

我还应该做些什么才能彻底避免这种情况?

答案1

具有高性能 MPM-Event 工作器的 Nginx 和 Apache 使用专用守护进程(服务)来运行 PHP。您已经以正确的方式配置了此守护进程。但现在您必须配置 Web 服务器以等待这么长时间。可以使用以下设置来完成神奇的设置fastcgi_读取超时

配置 Nginx 等待一段时间...

location ~ \.php$ {

  # allow logging
  access_log              /var/log/nginx/access.log vhosts;

  # include defaults
  include                 fastcgi_params;

  # define connection to php-fpm
  fastcgi_keep_conn       on;
  fastcgi_pass            unix:/var/run/php5-fpm.sock;
  fastcgi_index           index.php;

  # php script name
  fastcgi_param           SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  fastcgi_param           SCRIPT_NAME      $fastcgi_script_name;

  # set buffers
  fastcgi_buffer_size             128k;
  fastcgi_buffers                 256 16k;
  fastcgi_busy_buffers_size       256k;
  fastcgi_temp_file_write_size    256k;

  # allow web-server to wait for a long time before giving up
  fastcgi_read_timeout            3600s;

}

我不建议为可公开访问的 Web 服务器激活此设置。

如果某项任务需要花费一些时间,那么您应该通过 CLI(命令行界面)来执行此任务。一个很好的例子就是为一个大型网站生成 Google sitemap.xml。

例子:

通过命令行执行脚本...

cd /var/www/mysite/ ; php generateSitemap.php

定义一个 cronjob 来通过命令行每天执行脚本...

0 4 * * *    cd /var/www/mysite/ ; php generateSitemap.php

相关内容