【Apache】Ajaxコールバック関数の処理が60秒を超えるとタイムアウトする問題の原因と対応方法
はじめに
Drupal の Form API ( Web フォーム処理のための API )には Ajax のための機能がデフォルトで備わっています。それを使うとかんたんに Ajax 処理を実現することができます。 今回、この機能を使用してAjax処理をしていますが、60秒を超えるとタイムアウトになりAjaxエラーになりました。対応方法を調べたので今後のためにここに残しておきます。
原因
Apache設定
Apache設定ファイルにタイムアウト時間を追加します。
Timeout:デフォルトが60秒でこの時間を超えるとサーバーの接続は解除されます。
### TimeOut-Config ###
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
php設定
max_execution_time:最大処理時間を無制限に設定する(set_time_limit関数でも設定可能)
default_socket_timeout:ソケット接続のタイムアウト値を無制限にする
max_input_time:ファイルのアップロード等などスクリプトで入力を受け付けることができる最大秒数を設定します。
//OPENAI実行に60s以上かかる場合があるためデフォルトタイムアウト値60sを無制限にする
ini_set('max_execution_time', 0);
set_time_limit(0);
ini_set('default_socket_timeout', -1);
ini_set('max_input_time', -1);
変更後は必ずアパッチの再起動をします。
sudo systemctl restart httpd php-fpm
KUSANAGIの場合は以下のコマンドでかんたんに再起動できます
kusanagi restart
この記事に関するご質問やご意見などございましたらお問い合わせフォームからお気軽にご連絡ください。