C mod_cgidを使用する場合のCGIDScriptTimeoutの設定

Oracle HTTP Serverには、CGIスクリプトを実行するためにApacheによって提供されるmod_cgiおよびmod_cgidモジュールが含まれます。

CGIスクリプトを処理するようにApacheを構成する場合は、使用しているMulti-Processing Module (MPM)に基づいて、mod_cgimod_cgidのいずれかを選択する必要があります。

preforkなどのシングルスレッドMPMの場合は、mod_cgiを使用します。これは軽量で、サーバー・プロセス内で効率的に実行されるためです。workerやeventなどのマルチスレッドMPMの場合は、mod_cgidを使用します。CGI実行が別のデーモンにオフロードされるため、スレッドの問題を回避できます。mod_cgidモジュールには、mod_cgiモジュールと比較してマルチスレッド環境でのシステム・パフォーマンスを向上させるための最適化があります。『Apache Module mod_cgid』を参照してください。

MPMを確認するには、apachectl -V | grep MPMを実行し、Apache構成に適切なモジュール(mod_cgiまたはmod_cgid)をロードしてから、サーバーを再起動して変更を適用します。

Windowsの場合は、次の例に示すように、mod_cgiモジュールが必要です:


<IfModule cgi_module>
#
# CGIDScriptTimeout: Limits the waiting time for output from the CGI program
# Replace 20 with the actual timeout value to be set in seconds
#
 CGIDScriptTimeout 20
</IfModule>

UNIXでマルチスレッドMPMを使用する場合、デフォルトでmod_cgidモジュールがロードされます。構成を確認するには:

  1. Fusion Middleware Controlの「サーバーの詳細構成」ページまたはテキスト・エディタを使用して、httpd.confファイルを開きます。
  2. LoadModuleセクションで、mod_cgidがまだ構成されていない場合は、次の行を追加してmod_cgidモジュールをロードします:
    
    <IfDefine OHS_MPM_EVENT>
        LoadModule cgid_module "${PRODUCT_HOME}/modules/mod_cgid.so"
    </IfDefine>
    
    <IfDefine OHS_MPM_WORKER>
        LoadModule cgid_module "${PRODUCT_HOME}/modules/mod_cgid.so"
    </IfDefine>
    

mod_cgidモジュールは、CGIプログラムからの追加出力を待機する時間の長さを制限するために使用できるCGIDScriptTimeoutディレクティブをサポートしています。

CGIDScriptTimeoutディレクティブ

このディレクティブは、CGIプログラムからの出力を待機する時間の長さを制限します。

この時間を超えると、リクエストとCGIは終了します。これによってサーバーとの通信を停止してCGIスクリプトがリソースを使い果たすことを制限でき、意図しないエラーと悪意のあるアクション(DoS攻撃など)の両方から保護できます。

デフォルトでは、mod_cgidはTimeoutディレクティブを使用してCGI出力を待機する時間の長さを制限します。このタイムアウトは、CGIDScriptTimeoutディレクティブでオーバーライドできます。CGIDScriptTimeoutのデフォルト値(設定されていない場合、または0に設定されている場合)は、Timeoutディレクティブです。CGIDScriptTimeoutを構成するには:

  1. Fusion Middleware Controlの「サーバーの詳細構成」ページまたはテキスト・エディタを使用して、httpd.confファイルを開きます。
  2. CGIDScriptTimeoutディレクティブを構成するために次の行を追加します:
    <IfModule cgid_module> 
    # 
    # CGIDScriptTimeout: Limits the waiting time for output from the CGI program 
    # Replace 20 with the actual timeout value to be set in seconds 
    # 
     CGIDScriptTimeout 20
    </IfModule>
    

ノート:

最適な結果を得るには、アプリケーションでテストを実行する必要があります。タイムアウト値は、CGIプログラムがOHSに出力を返送するために必要な時間に基づいて設定する必要があります。前述の構成では、CGIプログラムからの出力を20秒間待機するようOHSに指示します。