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ワーカーを備えたNginxとApacheは、専用のデーモン(サービス)を使用してPHPを実行しています。このデーモンはすでに正しい方法で構成されています。しかし今、あなたはそのような長い時間待つようにウェブサーバーを設定しなければなりません。魔法の設定は、設定fastcgi_read_timeoutで行うことができます。
しばらく待つように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(コマンドラインインターフェイス)を介してこのタスクを実行する必要があります。良い例は、巨大なWebサイトのGooglesitemap.xmlの生成です。
例:
コマンドラインからスクリプトを実行します...
cd /var/www/mysite/ ; php generateSitemap.php
コマンドラインからスクリプトを毎日実行するcronジョブを定義します...
0 4 * * * cd /var/www/mysite/ ; php generateSitemap.php