XAMPPでApacheを2系統同時起動して分かった「便利さ」と「地雷」全部盛り体験談

同時起動したアパッチの画面を見つめる男子

はじめに

XAMPPを使っていると、こんな欲が出てくる。

  • Xdebugあり環境と、なし環境を一瞬で切り替えたい
  • PHP 8.1 と 8.2 を同時に触りたい
  • php.ini を毎回いじるのは正直めんどい

そこでやったのが、XAMPPを2系統(8.1 / 8.2)入れて、Apacheをポート違いで同時起動する構成だった。

最初は快適。
しかし、ある日突然、片方のApacheが起動しなくなった。


やっていた構成

  • XAMPP 8.1
    • Apache + PHP 8.1
    • Xdebug 有効
  • XAMPP 8.2
    • Apache + PHP 8.2
    • Xdebug 無効
  • MySQLは片方だけ使用

Apacheはポートを分けて同時起動。
ショートカットで即切り替え。
思想としてはかなり美しい。


起きた問題

ある日、XAMPP 8.1 の Apache が起動しない。

XAMPPコントロールパネルでは

Apache shutdown unexpectedly

おなじみの、あの曖昧すぎるメッセージ。

しかも厄介だったのは、

  • Apacheが起動しない
  • なのに error.log が更新されない
  • 去年の日付のまま止まっている

「ログすら吐けないレベルで死んでいる」状態。


原因の正体

httpd.exe を直接起動して、ようやく正体が見えた。

Cannot load modules/mod_dav_svn.so into server

つまり、

  • Apache設定で mod_dav_svn.so を読み込もうとしている
  • しかし、そのファイルは存在しない

mod_dav_svn.soSubversion(SVN)用のApacheモジュール
XAMPPの標準構成では、だいたい入っていない

過去に設定ファイルだけが残り、
モジュール本体が無い状態になっていた、というオチ。


解決方法

httpd-xampp.conf にある以下をコメントアウト。

LoadModule dav_svn_module modules/mod_dav_svn.so

これだけでApacheは復活。

ログが出なかった理由もこれで説明がつく。
Apacheは設定ファイルを読み込む段階で死んでいたため、
error.logに到達する前だった。


その結果どうなったか

  • XAMPP 8.1 の Apache → 起動成功
  • XAMPP 8.2 の Apache → もともと起動可能
  • 両方同時に起動できる状態に

ポートを変えていたため、
Apacheは「普通に正しく」2つ同時起動していた


Apache同時起動のメリット

  • Xdebug有無を即切り替えできる
  • PHPのバージョン違いを同時検証できる
  • 設定実験が安全(片方が壊れても片方は生きている)

開発用途なら、これはかなり強い。


Apache同時起動のデメリット

  • ポート管理がややこしい
  • ログの見間違いが起きやすい
  • MySQLを誤って2重起動すると事故る
  • 「昔の設定の亡霊」が残りやすい

今回の mod_dav_svn.so は、まさにそれ。


結論

Apacheは本来「1台1インスタンス」で使うもの。
しかし、ローカル開発環境では例外的に複数起動はアリ

ただし条件がある。

  • 何のために分けているか自分で説明できる
  • ポートと役割が明確
  • 使っていないモジュールは切る

この3つが守れないなら、
おとなしく1つにまとめた方が平和。


おわりに

今回のトラブルは「失敗」ではなく、
Apacheがどう起動し、どこで死ぬのかを理解できた成功体験だった。

サーバは黙って動くが、
壊れるときは雄弁だ。
ただし、ちゃんと耳を澄ませた人にだけ。

コメント

PAGE TOP