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のバージョンが違うことがわかりました。思ったこと
これで、同じサーバを使いながら脆弱性の検証を進めることができます。
ローカル環境だからできる実験!

