「Timeoutの秒数はどこで設定するの?」
「今の設定値を確認したい」
・・・Webサーバーの構築や障害対応の現場では、こうした確認が日常的に発生します。
この記事では、Apacheのタイムアウト(Timeout)設定を確認・変更する全手順を体系的に解説します。現代の主流であるApache 2.4系(RHEL 9 / AlmaLinux 9など)に完全対応した、今日から使える内容です。
そもそもApacheのTimeout(タイムアウト)とは
Apacheのタイムアウトとは、クライアント(ブラウザなど)とサーバー間でパケットの送受信が行われないまま、通信を強制的に切断するまでの待機時間(秒数)のことです。リクエストのパケットが途絶え、指定した時間が過ぎるとコネクションが自動的に切断されます。これにより、応答のない無駄な接続がサーバーのリソースを圧迫するのを防いでいます。
Timeoutが適用される3つの場面
Apache 2.4のTimeout ディレクティブは、以下の3つの通信フェーズすべてに共通して適用されます。・接続(Connect):クライアントからの接続要求を待つ時間
・受信(Receive):クライアントからリクエストデータが届くまでの待機時間
・送信(Send):クライアントへレスポンスを送信できるまでの待機時間
「受信だけ延ばしたい」「送信だけ変えたい」という場合は、後述する
ProxyTimeout や各モジュール固有のディレクティブとの使い分けが必要になります。バージョンによるデフォルト値の大きな違い
ネット上の古い記事では「デフォルトは300秒」と書かれていることが多いですが、これはApache 2.2系までの古い仕様です。現代のApache 2.4系以降では、デフォルト値が「60秒」に大幅に短縮されています。
・Apache 2.2 以前:デフォルト 300秒
・Apache 2.4 以降:デフォルト 60秒
動画のアップロードや重いデータベース処理を伴うWebシステムなど、処理に60秒以上かかる場合は、この値を明示的に変更する必要があります。
現在のTimeout設定値を確認する
設定を変更する前に、まず現在の設定値を確認しておくのが現場の基本です。設定ファイルをgrepで確認する
# grep -i timeout /etc/httpd/conf/httpd.conf Timeout 60
インクルードされたサブ設定ファイルも含めて一括確認したい場合は、以下を実行します。
# grep -ri timeout /etc/httpd/
Apacheが実際に認識している設定値を確認する
設定ファイルに記述がない場合は、Apacheがデフォルト値を使用しています。実際にApacheが認識している値を確認するには以下のコマンドを使います。# apachectl -t -D DUMP_RUN_CFG 2>&1 | grep -i timeout Timeout: 60
Timeoutの秒数を設定・変更する手順
Red Hat系Linux(AlmaLinux、Rocky Linux、CentOSなど)でdnf(または yum)を使ってインストールした場合、メインの設定ファイルは /etc/httpd/conf/httpd.conf になります。1. httpd.confファイルを編集する
設定ファイルを開き、Timeoutの値を設定します。# vi /etc/httpd/conf/httpd.conf
ファイル内の末尾、またはグローバル設定のセクションに、以下のように
Timeout ディレクティブを追記(または修正)します。ここでは例として120秒に設定します。# # Timeout: The number of seconds before receives and sends time out. # Timeout 120
:wq で保存して終了します。2. 設定の構文チェック(任意)
設定ファイルに文法ミスがないか、再起動前に確認しておくのが現場の鉄則です。# apachectl configtest Syntax OK
Syntax OK と表示されれば問題ありません。3. Apacheを再起動して設定を反映する
設定を反映させるには、Apacheを再起動します。本番環境では用途に応じて以下の2つを使い分けてください。【開発・テスト環境】通常の再起動(既存接続をすべて切断)
# systemctl restart httpd
【本番環境推奨】グレースフルリスタート(既存接続を切らずに反映)
# systemctl reload httpd # または # apachectl graceful
graceful(グレースフル)は、現在処理中のリクエストを完了させてから設定を反映します。サービスを止めずに設定変更できるため、稼働中の本番サーバーではこちらを使うのが鉄則です。バーチャルホスト単位でTimeoutを設定する
グローバル設定ではなく、特定のサイト(バーチャルホスト)だけタイムアウトを変えたい場面も現場では多くあります。その場合は<VirtualHost> ブロック内に記述します。<VirtualHost *:443> ServerName upload.example.com DocumentRoot /var/www/upload # このバーチャルホストだけ300秒に延長する Timeout 300 # その他の設定... </VirtualHost>
設定時の注意点(極端に長い時間はNG)
「タイムアウトでエラーになるなら、余裕を持って1000秒にしておこう」といった極端に長い設定はセキュリティ面・パフォーマンス面で推奨されません。パケットのやり取りができない(クライアント側がフリーズしているなどの)状態であっても、サーバーは指定された時間ずっとコネクションを維持して待ち続けます。悪意のある通信(スロー攻撃など)を受けた場合、あっという間にサーバーの同時接続数の上限に達し、Webサイトがダウンする原因になります。
Timeoutの値は、システム要件を満たす必要最小限の秒数にとどめましょう。
エラーログでタイムアウト発生を確認する
「本当にタイムアウトが原因でエラーが起きているのか確認したい」・・・そんなときはApacheのエラーログを確認します。# tail -f /var/log/httpd/error_log
[Thu Jan 15 10:30:00.123456 2024] [reqtimeout:info] [pid 12345] AH01382: Request header read timeout [Thu Jan 15 10:30:05.123456 2024] [error] [pid 12345] [client 192.168.1.10:54321] AH00542: Request exceeded Timeout: /slow-script.php
Timeout や timeout のキーワードで絞り込むとすばやく確認できます。# grep -i timeout /var/log/httpd/error_log
よくある質問・トラブルシューティング
Q. 設定を変えたのに反映されない
以下の順番で確認してください。・
apachectl configtest で Syntax OK が出ているか確認する・設定を書いたファイルが正しく読み込まれているか確認する(
grep -ri timeout /etc/httpd/)・Apacheを再起動(または
graceful)しているか確認する・バーチャルホストの設定がグローバル設定を上書きしていないか確認する
Q. ProxyTimeoutとTimeoutの違いは?
Timeout はApache自身がクライアントと直接通信する場合の待機時間です。ProxyTimeout は、Apacheがリバースプロキシとしてバックエンドサーバー(PHPやTomcatなど)に接続する際の待機時間です。PHPやPythonのアプリと連携している環境では、両方の設定が必要になる場合があります。
# クライアント$2194Apache間のタイムアウト Timeout 120 # Apache$2194バックエンド(PHP-FPMなど)間のタイムアウト ProxyTimeout 120
Q. mod_reqtimeoutとの関係は?
Apache 2.4ではmod_reqtimeout モジュールが標準で有効になっており、リクエストヘッダー・ボディの読み取りタイムアウトを細かく制御できます。Timeout より優先して動作する場面があるため、ログに reqtimeout と表示されている場合は /etc/httpd/conf.d/reqtimeout.conf も確認してください。本記事のまとめ
| 項目 | 内容 |
|---|---|
| デフォルト値(Apache 2.4以降) | 60秒 |
| 設定ファイル(RHEL系) | /etc/httpd/conf/httpd.conf |
| 設定ディレクティブ | Timeout 120(例:120秒にする場合) |
| 現在値の確認コマンド | apachectl -t -D DUMP_RUN_CFG 2>&1 | grep -i timeout |
| 構文チェック | apachectl configtest |
| 本番環境での反映 | apachectl graceful(既存接続を切らずに反映) |
| エラーログの確認 | grep -i timeout /var/log/httpd/error_log |
Apacheの設定やエラー解決で、無駄な時間を過ごしていませんか?
「Timeoutのデフォルト値の違い」や「gracefulとrestartの使い分け」など、バージョンや環境による違いをネットの古い情報でツギハギしていると、思わぬトラブルを招きます。
バージョンに振り回されず、現場で通用するWebサーバー構築の"型"を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
登録10秒/自動返信でDL/合わなければ解除3秒
<<関連記事>>
・MIMEでエンコードされたテキストを読めるように変換する
・viエディタで文字をコピーする
・ハードディスクの使用状況を調べるには
・tar.bz2ファイルの解凍・圧縮コマンド|tar.gzとの違いやオプション一覧
・tar.gz形式のファイルを解凍、展開するには
