【Apacheチューニング 第1回】セキュリティ編 – WAF導入とTLS強化で実現する、国家標準レベルの「要塞化Apache」

Apacheの限界を決めるのは「勘」ではない

こんにちは!「リナックス先生」です。
前回は鉄壁の守りを築きましたが、今回はWebサーバーの至上命題である「パフォーマンス」についてです。

コウ君

先生、チューニングって難しそうです。
ネットのおすすめ設定をコピペして MaxRequestWorkers 1000 にしてみたんですけど、サーバーが固まってSSHも繋がらなくなりました…。
やっぱりメモリ増設しか手はないんでしょうか?

リナックス先生

コピペ設定は絶対にダメよ!
サーバーのメモリ容量、WordPressのプラグイン数、OSの種類…環境によって正解は全部違うの。
今日は電卓を使って、君のサーバー専用の「パーフェクトな設定値」を算出するわよ。

1. 物理メモリから「許容接続数」を逆算する

Apacheが落ちる原因の99%は「メモリ不足によるOOM Killer(強制停止)」です。
まず、1アクセスあたりどれくらいメモリを使うかを実測します。

Step 1: プロセスの平均メモリサイズを測定

サーバーにSSH接続し、以下のコマンドを実行してください。

# httpdプロセスのメモリ使用量(RSS)を表示
ps -ylC httpd --sort:rss

※PHP-FPMを使用している場合は、php-fpm プロセスも測定して合算します。
仮定: 平均 50MB だったとします。

Step 2: 空きメモリの確認

OSやデータベース(MySQL)が使う分を除いて、Apacheにどれだけ捧げられるかを確認します。

free -m

仮定: 4GB (4000MB) のVPSで、OS+DBで1.5GB使用中。残り 2.5GB (2500MB) が利用可能。

Step 3: 黄金の計算式

利用可能メモリ (2500MB) ÷ 1プロセスのサイズ (50MB) = 50

これが、あなたのサーバーの限界値 MaxRequestWorkers = 50 です。
これを「1000」に設定すれば、メモリが溢れてサーバーが死ぬのは物理的に当然の結果なのです。

2. mpm_event.conf の完全理解

計算値を元に、/etc/httpd/conf.modules.d/00-mpm.conf (またはUbuntuのmpm_event.conf) を編集します。
単にMax値を決めるだけでなく、「アイドリング(待機)」の設定がレスポンス速度を左右します。

<IfModule mpm_event_module>
    # 同時接続数の上限(計算結果)
    ServerLimit              50
    MaxRequestWorkers        50

    # 起動時に用意しておくプロセス数
    StartServers              2

    # 待機スレッド数(少なすぎると急なアクセス増で待たされ、多すぎるとメモリ無駄)
    MinSpareThreads          25
    MaxSpareThreads          50

    # 1プロセスあたりのスレッド数(固定推奨)
    ThreadsPerChild          25

    # メモリリーク対策:1000回処理したらプロセスをリフレッシュ
    MaxConnectionsPerChild 1000
</IfModule>

3. コンテンツ圧縮とKeepAliveの最適化

メモリ計算ができたら、次は通信の効率化です。

Brotli圧縮の有効化

従来のGzipよりも高圧縮なBrotliを使うことで、転送速度を向上させます。

<IfModule mod_brotli.c>
    AddOutputFilterByType BROTLI_COMPRESS text/html text/css application/javascript application/json
    BrotliCompressionQuality 5
</IfModule>

KeepAliveTimeout の短縮

KeepAlive はONにすべきですが、デフォルトの5秒は長すぎます。
スマホでの閲覧が多い現代では、細切れの通信が多いため、接続維持は2〜3秒で十分です。

KeepAlive On
KeepAliveTimeout 3

4. ベンチマークで効果測定 (Apache Bench)

設定を変えたら、必ず効果測定を行います。ab コマンドを使いましょう。

# -n 1000 (合計リクエスト数) -c 10 (同時接続数)
ab -n 1000 -c 10 https://your-domain.com/

結果の中の Requests per second(1秒間にさばけた数)を見てください。
チューニング前より数値が上がっていれば成功です。


まとめ:科学的なアプローチで攻めろ

パフォーマンスチューニングに「魔法」はありません。あるのは「計算」と「計測」だけです。

  1. プロセスサイズを実測する。
  2. 物理メモリ内に収まるように上限を決める。
  3. ベンチマークで効果を確認する。

これを繰り返すことで、あなたのサーバーはスペック以上の性能を発揮し始めます。

コウ君

計算通り「50」に設定したら、アクセスが増えても落ちなくなりました!
その分、KeepAliveや圧縮設定を見直したおかげで、体感速度はむしろ上がってます!
「無理をさせない」って重要なんですね。

リナックス先生

理解できたようね。
リソース管理こそエンジニアの腕の見せ所よ。
さて最終回の次回は、ApacheをWebサイト用だけでなく、Node.jsやPythonアプリの司令塔として使う「リバースプロキシ」の極意を伝授するわ!

▼余裕のあるメモリが安定の鍵

チューニングで効率化しても、物理的なメモリ不足はどうにもなりません。アクセス増に合わせてスケールアップが容易な、プロ推奨のVPSはこちらです。

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント