C mod_cgidを使用する場合のCGIDScriptTimeoutの設定
Oracle HTTP Serverには、CGIスクリプトを実行するためにApacheによって提供されるmod_cgi
およびmod_cgid
モジュールが含まれます。
CGIスクリプトを処理するようにApacheを構成する場合は、使用しているMulti-Processing Module (MPM)に基づいて、mod_cgi
とmod_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
モジュールがロードされます。構成を確認するには:
- Fusion Middleware Controlの「サーバーの詳細構成」ページまたはテキスト・エディタを使用して、
httpd.conf
ファイルを開きます。 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プログラムからの出力を待機する時間の長さを制限します。
CGIDScriptTimeoutディレクティブ
このディレクティブは、CGIプログラムからの出力を待機する時間の長さを制限します。
この時間を超えると、リクエストとCGIは終了します。これによってサーバーとの通信を停止してCGIスクリプトがリソースを使い果たすことを制限でき、意図しないエラーと悪意のあるアクション(DoS攻撃など)の両方から保護できます。
デフォルトでは、mod_cgid
はTimeoutディレクティブを使用してCGI出力を待機する時間の長さを制限します。このタイムアウトは、CGIDScriptTimeout
ディレクティブでオーバーライドできます。CGIDScriptTimeout
のデフォルト値(設定されていない場合、または0
に設定されている場合)は、Timeoutディレクティブです。CGIDScriptTimeout
を構成するには:
- Fusion Middleware Controlの「サーバーの詳細構成」ページまたはテキスト・エディタを使用して、
httpd.conf
ファイルを開きます。 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に指示します。