【Apache】Ajaxコールバック関数の処理が60秒を超えるとタイムアウトする

こちらのサイトではDRUPAL10に関連する記事を掲載しています。

はじめに

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
このサイトに関するご意見・ご質問はこちらまで

この記事またはDrupalに関するご質問がございましたら、お気軽にお問い合わせください。

タイトルとURLをコピーしました