Ubuntu上に複数のApacheを共存させる

Ubuntu上に複数バージョンのApacheを共存させる方法について調べました。ポート番号で接続先のApacheを振り分けるようにしています。

環境

Windows11home
VM VMWare Workstation 17 Pro
 ゲストOS Ubuntu 25.10
 メインApache 2.4.65 が起動している状態

やりたいこと

 ポート番号によってバージョンが異なるApacheにリクエストを送信したい。

 (例)
 http://192.168.1.254:80/index.html → Apache1 2.4.65サーバ
 http://192.168.1.254:8080/index.html → Apache1 2.4.49サーバ
 を実現したい。

現状の確認

 現状の確認

# Ubuntu上で稼働しているApacheのバージョン確認

$ > pache2 -v
Server version: Apache/2.4.64 (Ubuntu)
Server built:   2025-09-03T14:58:51

 他バージョンのダウンロード、インストール

 私は脆弱性の検証を行いたかったので、脆弱性があるApache2.4.49をサブApacheとしてインストールすることにしました。
※危険なので、公開環境にはインストールしないこと!

# 他バージョンApacheのダウンロード~インストール
# バージョンごとに必要なライブラリが変わってきます

$ > cd /usr/local/src
$ > sudo wget https://archive.apache.org/dist/httpd/httpd-2.4.49.tar.gz
$ > sudo tar xzf httpd-2.4.49.tar.gz
$ > cd httpd-2.4.49

# コンパイルに必要なライブラリの取得、ファイル名の環境適応
$ > cd srclib
$ > sudo wget https://archive.apache.org/dist/apr/apr-1.6.5.tar.gz
$ > sudo wget https://archive.apache.org/dist/apr/apr-util-1.6.1.tar.gz
$ > sudo tar xzf apr-1.6.5.tar.gz
$ > sudo tar xzf apr-util-1.6.1.tar.gz
$ > sudo mv apr-1.6.5 apr
$ > sudo mv apr-util-1.6.1 apr-util

$ > sudo apt update
$ > sudo apt install build-essential
$ > sudo apt install libssl-dev libpcre3-dev
$ > sudo apt install libapr1-dev libaprutil1-dev

# コンパイルの実行
$ > cd /usr/local/src/httpd-2.4.49
$ > sudo ./configure --prefix=/usr/local/apache2.4.49 --disable-ssl
# 旧バージョンのSSLが古いライブラリを必要としていたので、SSLは使わないことにしました 
$ > sudo make
$ > sudo make install

メインApacheの設定確認

# メインApacheのポート確認

$ > sudo nano /etc/apache2/ports.conf

# nano
Listen 80
#を確認(変更無し)

サブApacheの設定変更

# サブApacheのポート番号等設定変更

$ > sudo nano /usr/local/apache2.4.49/conf/httpd.conf

# nano
Listen 80
↓
Listen 8080
ServerName localhost:8080

# nano
ServerRoot "/usr/local/apache2.4.49"
↓
ServerRoot "/usr/local/apache2.4.49"
PidFile /usr/local/apache2.4.49/logs/httpd.pid

# nano
ErrorLog "logs/error_log"
↓
#ErrorLog "logs/error_log"
ErrorLog /usr/local/apache2.4.49/logs/error_log

# nano
    CustomLog "logs/access_log" common
↓
    #CustomLog "logs/access_log" common
    CustomLog /usr/local/apache2.4.49/logs/access_log combined

※編集後Ctrl +s,Ctrl+x を忘れないこと(上書き保存、終了)

サブApacheを起動する前に繋がらないことを確認

# windowsからUbuntuにアクセス
C:\ > curl -i 192.168.254.128:80 | findstr Server:
Server: Apache/2.4.64 (Ubuntu)

C: > curl -i 192.168.254.128:8080 | findstr Server:
 Failed to connect to 192.168.254.128 port 8080 Could not connect to server

# port80はApache/2.4.64が起動しているが、port8080はレスポンスがない状態を確認

サブApacheの起動

# Ubuntu上でサブApacheを起動させる
sudo /usr/local/apache2.4.49/bin/apachectl start

確認

Windowsから次のコマンドで確認を行いました。

# windows
C:\ > curl -i 192.168.254.128:80 | findstr Server:
Server: Apache/2.4.64 (Ubuntu)

C:\ > curl -i 192.168.254.128:8080 | findstr Server:
Server: Apache/2.4.49 (Unix)

# ポート番号毎に実行されているApacheのバージョンが違うことがわかりました。

思ったこと

これで、同じサーバを使いながら脆弱性の検証を進めることができます。
ローカル環境だからできる実験!