ApacheのTimeoutを設定する方法、デフォルト値、ProxyTimeoutやKeepAliveTimeoutとの違い

目次

スポンサードリンク

ApacheはオープンソースのWebサーバソフトウェアです。この記事ではタイムアウトを設定する方法について紹介します。また、タイムアウトのデフォルト値やプロキシサーバーとして動作している場合のタイムアウト設定について解説します。

タイムアウトとは

Apacheではリクエスト処理のタイムアウト時間を設定することができます。この値を超えると、Apacheはリクエストを中断しエラーを返します。

タイムアウトを設定することは、サーバーリソースの保護やセキュリティ面でも重要な意味を持ちます。タイムアウトを設定することで、長時間処理されるリクエストや、異常な接続によってサーバーが過負荷になるのを防ぐことがでます。また、特定の攻撃手法では、長時間接続を維持することでサーバーに負荷をかけたり、情報漏洩を狙ったりすることがあります。タイムアウト設定は、このような攻撃に対する防御策の一つとなります。

タイムアウトの設定方法

タイムアウトはApacheの設定ファイルで指定することができます。通常は、Apacheのメイン設定ファイルであるhttpd.confに記述されることが多いですが、仮想ホストの設定ファイルや、.htaccess ファイルなど、他のファイルにも記述することはできます。現在の設定を調査する際はgrepコマンドなどで設定ファイル全体を調査しましょう。

Timeoutディレクティブでタイムアウトの秒数を指定します。

Timeout 300  # リクエスト処理のタイムアウトを300秒に設定

Timeout ディレクティブの設定値が影響を与える処理は公式ドキュメントに詳細が記述されています。
https://httpd.apache.org/docs/current/ja/mod/core.html#timeout

タイムアウトのデフォルト値

Timeoutディレクティブを指定しない場合のデフォルト値は「60秒」です。

デフォルト値も公式ドキュメントに記載があります。
https://httpd.apache.org/docs/current/ja/mod/core.html#timeout

ProxyTimeoutとの違い

ProxyTimeoutディレクティブは、Apacheがプロキシとして動作している際に、バックエンドサーバーとの接続におけるタイムアウト時間を設定するためのディレクティブです。ProxyTimeout のデフォルト値は 300秒です。Timeoutのデフォルト値と異なる点は要注意です。

KeepAliveTimeoutとの違い

KeepAliveTimeoutディレクティブは、Keep-Alive接続のタイムアウト時間を設定するディレクティブです。Keep-Alive接続とは、一度の接続で複数のリクエストを処理する仕組みです。接続を閉じる前に、Apache が次のリクエストを何秒待つかを指定することができます。リクエストを受け付けた後は、Timeout ディレクティブによって指定されたタイムアウト値が使われます。

まとめ

タイムアウトの設定方法やデフォルト値、似ているディレクティブとの違いについて紹介してきました。 タイムアウトが発生する原因は、ネットワークの遅延、バックエンドサーバーの負荷など、様々な要因が考えられます。エラーが発生するとエラーログに原因やトラブルシューティングのヒントが記録されているので、調査の際は確認するようにしましょう。


Linuxの基礎からセキュリティまで、サーバー運用に必要な知識をまとめた書籍

Webシステムの基礎について徹底的に学べるUdemy講座
【PHP, MYSQL, Apache】ガチで学びたい人のためのWEB開発の基礎 icon