1台のサーバーに複数バージョンのApacheをインストールする方法

Apache HTTP Serverは、最も広く使われているWebサーバーの1つであり、多くの企業や開発者が利用しています。プロジェクトごとに異なるバージョンのApacheを利用する必要がある場合や、レガシーシステムと最新システムを同時に運用するケースでは、1台のサーバーに複数バージョンのApacheをインストールして管理することが求められます。

この記事では、Apacheの複数バージョンを1台のサーバーにインストールし、効率的に切り替えや共存を実現する方法について詳しく解説します。複数のバージョンを適切にインストール・管理することで、異なるプロジェクト要件への対応や、テスト環境の構築が容易になります。

初心者から上級者まで理解できるように、インストール手順から設定、トラブルシューティングまでを網羅したガイドとなっています。これにより、開発環境を柔軟に構築し、スムーズな運用が可能になります。

目次

複数バージョンのApacheをインストールするメリット


Apacheの複数バージョンを1台のサーバーにインストールすることで、以下のような多くの利点があります。

1. プロジェクトごとのバージョン要件に対応


異なるプロジェクトで使用するApacheのバージョンが異なる場合、複数バージョンを並行して運用することで、環境の切り替えが容易になります。例えば、あるプロジェクトではApache 2.4が必要で、別のプロジェクトでは2.2が求められる場合などです。

2. レガシーシステムの維持


レガシーシステムでは古いバージョンのApacheを使い続ける必要があることがあります。最新バージョンを導入しても、古いシステムがそのまま動作する環境を維持できるため、段階的な移行が可能です。

3. テスト環境の構築と比較


新しいバージョンへの移行を行う前に、テスト環境として異なるApacheのバージョンを並行して稼働させ、パフォーマンスや互換性を比較できます。これにより、本番環境への影響を最小限に抑えることができます。

4. 柔軟なデバッグとトラブルシューティング


特定のバージョンで発生するバグや挙動の違いを調査する際、複数のApacheを切り替えて動作確認が行えるため、効率的なトラブルシューティングが可能になります。

5. リソースの有効活用


1台のサーバーで複数バージョンを運用することで、サーバー台数を増やす必要がなくなり、コスト削減につながります。また、サーバーリソースを最大限に活用できます。

複数バージョンのApacheを同時に運用することは、効率的で柔軟なWebサーバー管理を実現し、多様なニーズに応える重要な手段となります。

必要な環境と前提条件の確認


複数バージョンのApacheを1台のサーバーにインストールする前に、環境の確認と準備が不可欠です。環境によっては、インストールや設定で問題が発生する可能性があるため、事前にしっかり確認しておきましょう。

1. サーバー環境の確認

  • OSの種類とバージョン
    ApacheはLinux系OS (CentOS, Ubuntu, Debianなど) で動作します。使用するOSのバージョンがApacheの複数インストールをサポートしているか確認します。
  • CPUとメモリ
    複数のApacheインスタンスが稼働するため、十分なCPUとメモリが必要です。最低でも2GB以上のメモリが推奨されます。

2. 必要なパッケージとツール

  • 必須パッケージ
  sudo apt update  
  sudo apt install build-essential libpcre3 libpcre3-dev libssl-dev


CentOSやRedHat系では以下をインストールします。

  sudo yum groupinstall "Development Tools"  
  sudo yum install pcre-devel openssl-devel
  • wget/curl:Apacheのソースコードをダウンロードするために必要です。
  sudo apt install wget curl

3. ポートの確認と競合回避


デフォルトでApacheはポート80や443を使用します。複数バージョンを同時に稼働させる場合、ポートが競合しないように設定します。例えば、Apache 2.4はポート8080、Apache 2.2はポート9090を使用するなど、ポートを分ける準備が必要です。

4. ストレージ容量の確認


Apacheの複数バージョンをインストールするには、十分なストレージ容量が必要です。各バージョンで約200MB〜500MB程度のディスクスペースが必要になります。

5. 権限の確認


Apacheをインストールする際はrootまたはsudo権限が必要です。権限不足でエラーが発生しないよう、必要なユーザーが適切な権限を持っているか確認します。

sudo su

これらの前提条件を満たしていれば、スムーズに複数のApacheバージョンをインストールし、環境を整えることができます。

Apacheの各バージョンのダウンロードとインストール


複数バージョンのApacheを1台のサーバーにインストールするには、ソースコードをダウンロードしてコンパイルする方法が一般的です。公式リポジトリを使う方法もありますが、バージョンが限られるため、手動インストールが推奨されます。

1. Apacheの公式サイトからソースコードを取得


Apacheの公式サイトから必要なバージョンのソースコードをダウンロードします。

cd /usr/local/src  
wget https://downloads.apache.org/httpd/httpd-2.4.54.tar.gz  
wget https://downloads.apache.org/httpd/httpd-2.2.34.tar.gz  


https://downloads.apache.org/httpd/ から希望のバージョンを探してダウンロードします。

2. ソースコードの解凍


ダウンロードしたtarファイルを解凍します。

tar -xvzf httpd-2.4.54.tar.gz  
tar -xvzf httpd-2.2.34.tar.gz  

3. 各バージョンを別のディレクトリにインストール


バージョンごとに異なるディレクトリにインストールすることで、バージョン間の競合を防ぎます。

cd httpd-2.4.54  
./configure --prefix=/usr/local/apache2_4 --enable-so --enable-ssl --with-mpm=event  
make  
sudo make install  
cd ../httpd-2.2.34  
./configure --prefix=/usr/local/apache2_2 --enable-so --enable-ssl --with-mpm=worker  
make  
sudo make install  


--prefixオプションを使用して、バージョンごとに異なるディレクトリへインストールします。

4. インストール完了の確認


インストールが完了したら、各バージョンが正しく動作するか確認します。

/usr/local/apache2_4/bin/httpd -v  
/usr/local/apache2_2/bin/httpd -v  


それぞれのApacheバージョンが出力されれば、インストールは成功です。

5. パスを通して簡単に実行


環境変数を使ってパスを設定し、各バージョンを簡単に切り替えられるようにします。

echo 'export PATH=/usr/local/apache2_4/bin:$PATH' >> ~/.bashrc  
source ~/.bashrc  


必要に応じてapache2_2のパスも設定します。

これで、複数バージョンのApacheを同一サーバーにインストールする準備が整います。

バージョンごとのディレクトリ構成の設計


複数のApacheバージョンを1台のサーバーで共存させるためには、ディレクトリ構成を適切に設計することが重要です。ディレクトリが混在すると競合や設定ミスが発生する可能性があるため、バージョンごとに分離した明確な構成を作成します。

1. 基本のディレクトリ構成例


以下のように、Apacheのバージョンごとに個別のディレクトリを作成します。

/usr/local/apache2_4/  
/usr/local/apache2_2/  
/var/www/html/  
/var/log/apache2_4/  
/var/log/apache2_2/  
  • /usr/local/apache2_4/:Apache 2.4の実行ファイルや設定ファイルを格納。
  • /usr/local/apache2_2/:Apache 2.2の実行ファイルや設定ファイルを格納。
  • /var/www/html/:共通のドキュメントルート。プロジェクトごとにサブディレクトリを作成します。
  • /var/log/apache2_4/:Apache 2.4のログファイルを保存。
  • /var/log/apache2_2/:Apache 2.2のログファイルを保存。

2. ディレクトリの作成


Apacheのバージョンごとにディレクトリを作成します。

sudo mkdir -p /usr/local/apache2_4  
sudo mkdir -p /usr/local/apache2_2  
sudo mkdir -p /var/log/apache2_4  
sudo mkdir -p /var/log/apache2_2  

3. 設定ファイルの分離


Apacheの設定ファイル (httpd.conf) もバージョンごとに分けて管理します。

/usr/local/apache2_4/conf/httpd.conf  
/usr/local/apache2_2/conf/httpd.conf  


バージョンごとの設定を反映しやすく、メンテナンスしやすい構造になります。

4. 起動スクリプトの分離


バージョンごとに起動スクリプトを作成し、管理します。

/etc/init.d/apache2_4  
/etc/init.d/apache2_2  


スクリプト内で/usr/local/apache2_4/bin/httpd/usr/local/apache2_2/bin/httpdを指定することで、バージョンごとに独立した起動・停止が可能です。

5. ポート番号の管理


同時に複数のApacheを稼働させる場合は、ポート番号を変更して競合を回避します。

/usr/local/apache2_4/conf/httpd.conf  
Listen 8080  
/usr/local/apache2_2/conf/httpd.conf  
Listen 9090  


Apache 2.4は8080ポート、Apache 2.2は9090ポートで稼働するように設定します。

6. シンボリックリンクで簡単に切り替え


デフォルトの/usr/local/apache/にシンボリックリンクを作成して、簡単にバージョンを切り替えられるようにします。

sudo ln -s /usr/local/apache2_4 /usr/local/apache  


バージョンを切り替える場合は、リンク先を変更するだけで済みます。

sudo ln -sf /usr/local/apache2_2 /usr/local/apache  

このようにディレクトリを分離することで、複数のApacheバージョンが競合せず、管理しやすくなります。

コンパイル時のオプションと注意点


Apacheをソースからコンパイルしてインストールする際、適切なオプションを指定することで、複数バージョンが競合せずに共存できます。ここでは、Apacheの各バージョンをコンパイルする際の重要なオプションと注意点を解説します。

1. コンパイルオプションの基本構成


Apacheをコンパイルする際は、configureスクリプトにさまざまなオプションを付与します。これにより、必要なモジュールやディレクトリのパスを指定し、バージョン間での競合を防ぎます。

基本的なコンパイル例 (Apache 2.4)

cd /usr/local/src/httpd-2.4.54  
./configure --prefix=/usr/local/apache2_4 \  
--enable-so \  
--enable-ssl \  
--with-mpm=event \  
--enable-mods-shared=all \  
--with-pcre=/usr/bin/pcre-config  
make  
sudo make install  

基本的なコンパイル例 (Apache 2.2)

cd /usr/local/src/httpd-2.2.34  
./configure --prefix=/usr/local/apache2_2 \  
--enable-so \  
--enable-ssl \  
--with-mpm=worker \  
--enable-rewrite=shared \  
--with-pcre=/usr/bin/pcre-config  
make  
sudo make install  

2. 主なオプションの解説

  • --prefix:インストール先を指定します。バージョンごとに異なるディレクトリを指定し、衝突を防ぎます。
  • --enable-so:動的モジュールのロードを有効にします。後から必要なモジュールを追加できます。
  • --enable-ssl:SSL/TLS機能を有効化します。HTTPS通信が可能になります。
  • --with-mpm:マルチプロセッシングモジュール(MPM)を指定します。eventworkerpreforkから選択できます。
  • --enable-mods-shared=all:すべてのモジュールを動的モジュールとしてビルドします。必要に応じてLoadModuleで有効化します。
  • --with-pcre:PCRE (Perl Compatible Regular Expressions) ライブラリのパスを指定します。モジュールの正規表現処理に必要です。

3. バージョンごとの環境分離


異なるバージョンをインストールする場合、以下のポイントに注意します。

  • 異なるインストールパスの指定--prefixでバージョンごとに異なるディレクトリを指定します。
  • 異なるポートで稼働:設定ファイルでListenポートを変更して、バージョン間のポート競合を防ぎます。
  • サービス名の変更init.dスクリプトやsystemdユニットファイルでサービス名を変更し、同じサービス名が競合しないようにします。

4. make clean での再ビルド


コンパイル時にオプションを変更した場合は、make cleanを実行してから再度configureを行う必要があります。

make clean  
./configure --prefix=/usr/local/apache2_4 --enable-ssl  
make  
sudo make install  

5. コンパイル時のエラー対処

  • エラー例1:pcre-configが見つからない
  configure: error: pcre-config for libpcre not found  


対処法:PCREライブラリをインストールします。

  sudo apt install libpcre3-dev  
  • エラー例2:OpenSSLが見つからない
  configure: error: mod_ssl has been requested but can’t be built due to OpenSSL not being installed  


対処法:OpenSSLの開発ライブラリをインストールします。

  sudo apt install libssl-dev  

6. インストール後の確認


コンパイルが完了したら、各バージョンのhttpdコマンドでバージョンを確認します。

/usr/local/apache2_4/bin/httpd -v  
/usr/local/apache2_2/bin/httpd -v  

これで、コンパイルオプションを適切に指定し、複数バージョンのApacheをインストールする準備が整います。

Apacheの複数バージョンを切り替える方法


1台のサーバーに複数バージョンのApacheをインストールした後は、状況に応じてバージョンを切り替えて利用する必要があります。ここでは、シンボリックリンクや環境変数を活用して、簡単にApacheのバージョンを切り替える方法を解説します。

1. シンボリックリンクを使った切り替え


シンボリックリンクを利用すると、デフォルトのApacheインストールディレクトリを切り替えるだけでバージョン変更が可能です。

シンボリックリンクの作成

sudo ln -s /usr/local/apache2_4 /usr/local/apache  


Apache 2.2に切り替える場合は以下のコマンドを実行します。

sudo ln -sf /usr/local/apache2_2 /usr/local/apache  


/usr/local/apacheへのリンク先を変更するだけで、すぐに異なるバージョンのApacheを利用できます。

バージョン確認

/usr/local/apache/bin/httpd -v  


現在のApacheのバージョンが表示され、切り替えが正しく行われていることを確認できます。

2. 環境変数での切り替え


環境変数PATHを変更して、使用するApacheのバージョンを切り替える方法です。

bashrcやzshrcへの設定

echo 'export PATH=/usr/local/apache2_4/bin:$PATH' >> ~/.bashrc  
source ~/.bashrc  


Apache 2.2を使いたい場合は、以下のようにPATHを変更します。

echo 'export PATH=/usr/local/apache2_2/bin:$PATH' >> ~/.bashrc  
source ~/.bashrc  

バージョンの切り替え確認

httpd -v  


httpdコマンドを実行し、現在のバージョンを確認します。

3. systemctlでの切り替え


複数のApacheサービスをsystemdで管理し、必要に応じてサービスを切り替える方法です。

systemdユニットファイルの作成

バージョンごとに個別のユニットファイルを作成します。

sudo cp /etc/systemd/system/apache2.service /etc/systemd/system/apache2_4.service  
sudo cp /etc/systemd/system/apache2.service /etc/systemd/system/apache2_2.service  


ユニットファイルの内容を変更し、それぞれのExecStartで異なるバージョンのhttpdを指定します。

[Service]  
ExecStart=/usr/local/apache2_4/bin/httpd -k start  


Apache 2.2のユニットファイルは次のように設定します。

[Service]  
ExecStart=/usr/local/apache2_2/bin/httpd -k start  

Apacheの起動・停止

sudo systemctl start apache2_4  
sudo systemctl stop apache2_4  
sudo systemctl start apache2_2  


この方法で、Apacheのバージョンごとにサービスを管理し、必要に応じて切り替えが可能です。

4. 利用するポートの設定変更


複数のApacheを同時に動作させたい場合は、httpd.confでリッスンポートを変更します。

設定例 (Apache 2.4用)

Listen 8080  


Apache 2.2には別のポートを指定します。

Listen 9090  


複数のバージョンを同時に起動し、ポートを使い分けることで並行稼働が可能になります。

5. 切り替え時の注意点

  • キャッシュクリア:切り替え後はキャッシュの影響で意図しない動作が発生する可能性があります。systemctl restartでApacheを再起動して反映させます。
  • モジュールの互換性:バージョンによって対応しているモジュールが異なるため、切り替え時にモジュールのロードエラーが出る可能性があります。必要に応じてLoadModuleのコメントアウトなどを行います。

これらの方法で、状況に応じて柔軟にApacheのバージョンを切り替えることができます。シンプルなシンボリックリンクから、systemdを利用した高度な切り替えまで、用途に合わせて選択してください。

各バージョンのApacheを同時に稼働させる設定方法


複数バージョンのApacheを1台のサーバーで同時に稼働させるには、ポート番号やドキュメントルートを個別に設定し、互いに競合しないようにする必要があります。このセクションでは、Apacheの異なるバージョンを同時に動作させる具体的な設定方法を解説します。

1. ポート番号の変更


デフォルトでは、Apacheはポート80でリッスンします。しかし、複数バージョンを同時に稼働させるためには、ポート番号を分けて設定する必要があります。

Apache 2.4の設定例

/usr/local/apache2_4/conf/httpd.confを編集します。

Listen 8080

Apache 2.2の設定例

/usr/local/apache2_2/conf/httpd.confを編集します。

Listen 9090

これにより、Apache 2.4はポート8080、Apache 2.2はポート9090で稼働します。

2. ドキュメントルートの分離


各バージョンのApacheが同じドキュメントルートを使用すると、設定が競合する可能性があります。バージョンごとに異なるドキュメントルートを設定しましょう。

Apache 2.4の設定例

DocumentRoot "/var/www/apache2_4"

Apache 2.2の設定例

DocumentRoot "/var/www/apache2_2"

必要に応じて、個別のインデックスファイル (index.html) を配置し、どのバージョンがどのディレクトリを参照しているかを明確にします。

3. PIDファイルとログファイルの分離


PIDファイルやログファイルも、バージョンごとに分離しておく必要があります。

PidFile /var/run/apache2_4.pid
ErrorLog /var/log/apache2_4/error.log
CustomLog /var/log/apache2_4/access.log combined

Apache 2.2のhttpd.confでは以下のように設定します。

PidFile /var/run/apache2_2.pid
ErrorLog /var/log/apache2_2/error.log
CustomLog /var/log/apache2_2/access.log combined

4. 起動スクリプトの作成


Apacheの各バージョンごとに起動スクリプトを作成し、サービスとして管理できるようにします。

Apache 2.4用スクリプト (/etc/init.d/apache2_4)

#!/bin/bash
/usr/local/apache2_4/bin/httpd -k start

Apache 2.2用スクリプト (/etc/init.d/apache2_2)

#!/bin/bash
/usr/local/apache2_2/bin/httpd -k start

スクリプトに実行権限を付与します。

sudo chmod +x /etc/init.d/apache2_4
sudo chmod +x /etc/init.d/apache2_2

5. 同時起動の確認


それぞれのApacheインスタンスを起動し、同時に稼働していることを確認します。

sudo /etc/init.d/apache2_4 start
sudo /etc/init.d/apache2_2 start

稼働状況を確認します。

netstat -tuln | grep httpd
tcp   0   0   0.0.0.0:8080   0.0.0.0:*   LISTEN
tcp   0   0   0.0.0.0:9090   0.0.0.0:*   LISTEN

6. ブラウザからのアクセス確認


ブラウザで以下のURLにアクセスし、それぞれのApacheが正しく稼働しているか確認します。

  • Apache 2.4: http://<サーバーIP>:8080
  • Apache 2.2: http://<サーバーIP>:9090

7. 自動起動の設定


サーバー起動時に自動的にApacheの複数バージョンが起動するよう、systemctlに登録します。

sudo systemctl enable apache2_4
sudo systemctl enable apache2_2

8. 同時稼働時の注意点

  • モジュールの競合に注意:Apacheのモジュールが同じパスに存在する場合、競合が発生する可能性があります。バージョンごとに異なるモジュールパスを指定してください。
  • リソース管理:複数のApacheが同時に稼働するため、メモリやCPUリソースの消費が増加します。サーバーのスペックに応じて、インスタンス数を調整してください。

これで、Apacheの異なるバージョンを同時に稼働させる環境が整います。バージョンごとに分離された設定で、安定した運用が可能になります。

トラブルシューティングとよくあるエラーの対処法


Apacheの複数バージョンを同時に運用する場合、設定ミスや環境の競合によってさまざまなエラーが発生することがあります。ここでは、よくあるトラブルとその解決方法を詳しく解説します。

1. ポート競合エラー


エラー例

(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80


原因:複数のApacheインスタンスが同じポートをリッスンしているため、競合が発生しています。

対処法
各バージョンのhttpd.confでポート番号を変更し、競合を回避します。

Listen 8080  # Apache 2.4
Listen 9090  # Apache 2.2


設定後、Apacheを再起動します。

sudo systemctl restart apache2_4  
sudo systemctl restart apache2_2  

2. PIDファイルの競合


エラー例

AH00071: The PID file '/usr/local/apache/logs/httpd.pid' already exists


原因:複数のApacheが同じPIDファイルを使用しているため、競合が発生しています。

対処法
バージョンごとに異なるPIDファイルを指定します。

PidFile /var/run/apache2_4.pid  # Apache 2.4
PidFile /var/run/apache2_2.pid  # Apache 2.2


設定後に再起動します。

3. モジュールのロードエラー


エラー例

httpd: Syntax error on line 101 of /usr/local/apache2_4/conf/httpd.conf: Cannot load modules/mod_ssl.so into server: file not found


原因:Apacheが異なるバージョンのモジュールをロードしようとしています。

対処法
モジュールパスをバージョンごとに正しく指定します。

LoadModule ssl_module /usr/local/apache2_4/modules/mod_ssl.so


必要なモジュールが存在しない場合は、コンパイル時に有効化します。

./configure --enable-ssl --enable-so
make  
sudo make install  

4. 設定ファイルの文法エラー


エラー例

Syntax error on line 205 of /usr/local/apache2_4/conf/httpd.conf: Invalid command 'SSLProtocol'


原因:Apacheのバージョンによっては、一部の設定ディレクティブがサポートされていません。

対処法
設定ファイルの文法チェックを行います。

/usr/local/apache2_4/bin/apachectl configtest


エラー箇所を特定し、該当ディレクティブを修正またはコメントアウトします。

5. ログファイルの競合


エラー例

AH00015: Unable to open logs  


原因:複数のApacheが同じログファイルを使用しようとしているため、競合しています。

対処法
バージョンごとにログファイルを分離します。

ErrorLog /var/log/apache2_4/error.log
CustomLog /var/log/apache2_4/access.log combined


Apache 2.2には以下のように設定します。

ErrorLog /var/log/apache2_2/error.log
CustomLog /var/log/apache2_2/access.log combined

6. 起動時の権限エラー


エラー例

(13)Permission denied: AH00072: make_sock: could not bind to address [::]:8080


原因:Apacheがポート80や443などの特権ポートで起動しようとしていますが、権限がありません。

対処法
Apacheをroot権限で起動するか、ポート番号を1024以上の任意のポートに変更します。

sudo /usr/local/apache2_4/bin/httpd -k start


または、httpd.confでリッスンポートを変更します。

Listen 8080

7. Firewallの設定ミス


エラー例

ERR_CONNECTION_TIMED_OUT


原因:FirewallでApacheのポートがブロックされています。

対処法
Firewallでポートを開放します。

sudo ufw allow 8080/tcp  
sudo ufw allow 9090/tcp  
sudo ufw reload

8. サービスが起動しない


エラー例

Job for apache2.service failed because the control process exited with error code


原因:設定ファイルの誤り、またはポート競合が原因でApacheが起動できません。

対処法
ログファイルを確認してエラーの詳細を特定します。

sudo tail -f /var/log/apache2_4/error.log


エラー内容に従ってhttpd.confを修正し、再起動します。

sudo systemctl restart apache2_4

これらのトラブルシューティング方法を活用することで、Apacheの複数バージョン運用に伴うエラーを迅速に解決し、安定した運用環境を構築できます。

まとめ


本記事では、1台のサーバーに複数バージョンのApache HTTP Serverをインストールし、同時に運用する方法について解説しました。

Apacheの複数バージョンをインストールすることで、異なるプロジェクト要件への対応やレガシーシステムの維持が容易になります。ポート番号の変更やディレクトリの分離、シンボリックリンクによる切り替えなど、バージョン間で競合を防ぐための工夫を取り入れることで、安全かつ柔軟な運用が可能です。

トラブルシューティングに関する知識も重要で、ポート競合やPIDファイルの衝突など、実際に起こりやすい問題への対処法を理解しておくことで、スムーズにシステムを維持できます。

この手法を活用することで、複数のプロジェクトや開発環境を1台のサーバーで効率よく管理でき、コスト削減や運用効率の向上が期待できます。

コメント

コメントする

目次