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)を指定します。event
、worker
、prefork
から選択できます。--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台のサーバーで効率よく管理でき、コスト削減や運用効率の向上が期待できます。
コメント