我无法避免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网关超时。

我还应该做些什么来避免它呢?

带有高性能MPM-Event worker的Nginx和Apache正在使用专用守护进程(服务)来运行PHP。 您已经以正确的方式configuration了这个守护进程。 但是现在你必须configurationWeb服务器来等待这么长的时间。 魔术设置可以通过设置fastcgi_read_timeout来完成。

configurationNginx等待一段时间…

 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; } 

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

如果有一个任务需要一些时间 – 你应该通过CLI(命令行界面)来完成这个任务。 一个很好的例子可能是一个巨大网站的Google sitemap.xml的生成。

例:

通过命令行执行脚本…

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

定义一个cronjob来通过命令行执行脚本…

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