MENU

Apacheをソースコードからビルドしてサーバーに導入する実務手順

最終的なコマンドの流れを先に示します。詳細は後続の各セクションで説明します。

# 大まかな流れ(各ステップの詳細は後述)
cd /usr/local/src
wget https://downloads.apache.org/httpd/httpd-2.4.62.tar.gz
sha256sum -c httpd-2.4.62.tar.gz.sha256
tar zxf httpd-2.4.62.tar.gz
cd httpd-2.4.62
./configure --prefix=/usr/local/apache2 --enable-ssl --enable-so --enable-rewrite --with-mpm=event
make -j$(nproc)
sudo make install
目次

パッケージ版との使い分け——ソースビルドを選ぶ場面

dnf install httpdapt install apache2 で済むなら、それが最善です。OS標準パッケージは依存関係・セキュリティアップデートの追跡が自動化されており、運用コストが低い選択肢です。

ソースビルドが有効なのは次の場合です。

  • OSリポジトリのバージョンが古く、必要な機能やセキュリティ修正が含まれていない
  • 特定のコンパイルオプションやモジュール構成を自分で管理したい
  • インストール先を /usr/local/apache2 など独立したパスに固定したい

注意点として、OSパッケージ版の Apache(httpd または apache2)がすでにインストールされている場合はソースビルド版と競合する可能性があります。ソースビルドに切り替える場合は事前にパッケージ版を削除してください。

ビルドに必要な依存パッケージを揃える

Apache 2.4 のビルドには APR・APR-Util・PCRE2・OpenSSL の開発ヘッダーが必要です。

Rocky Linux / AlmaLinux / RHEL 9 系

sudo dnf install -y gcc make \
  apr-devel apr-util-devel \
  pcre2-devel openssl-devel \
  expat-devel libxml2-devel

Ubuntu 22.04 / 24.04 系

sudo apt install -y build-essential \
  libapr1-dev libaprutil1-dev \
  libpcre2-dev libssl-dev \
  libexpat1-dev libxml2-dev

これらが揃っていないと configure 実行中に configure: error: APR not foundpcre2-config for libpcre2 not found といったエラーで止まります。エラーメッセージを確認してパッケージ名を特定するのが早道です。

ソースコードの取得とハッシュ検証

バージョン番号は https://httpd.apache.org/download.cgi で最新の安定版を確認してから使ってください。以下は 2.4.62 を例にしています。

cd /usr/local/src
sudo wget https://downloads.apache.org/httpd/httpd-2.4.62.tar.gz
sudo wget https://downloads.apache.org/httpd/httpd-2.4.62.tar.gz.sha256
sha256sum -c httpd-2.4.62.tar.gz.sha256

httpd-2.4.62.tar.gz: OK と表示されれば改ざんなし。FAILED が出た場合はダウンロードをやり直してください。ミラーサイト経由でダウンロードした場合でも、ハッシュ検証は必ず公式サイトの値と照合します。

sudo tar zxf httpd-2.4.62.tar.gz
cd httpd-2.4.62

configure・コンパイル・インストールを実行する

本番サーバーを想定した典型的なオプション構成です。

sudo ./configure \
  --prefix=/usr/local/apache2 \
  --enable-ssl \
  --enable-so \
  --enable-rewrite \
  --with-mpm=event

sudo make -j$(nproc)
sudo make install

各オプションの意味は以下のとおりです。

  • --prefix=/usr/local/apache2:インストール先を独立したディレクトリに固定し、OS標準パスと混在させない
  • --enable-ssl:HTTPS対応モジュール(mod_ssl)を有効化
  • --enable-so:モジュールを動的ロード(DSO)できるようにする。後からモジュールを追加しやすくなる
  • --enable-rewrite:URLリライトに使う mod_rewrite を有効化
  • --with-mpm=event:接続ごとにスレッドを使うイベント駆動MPM。高並列アクセスに強く、現在の主流

make -j$(nproc) は CPU コア数だけ並列ビルドします。シングルコア環境でも -j1 に置き換えるだけで問題ありません。make install は root 権限が必要です。

インストール完了後、バージョンを確認します。

/usr/local/apache2/bin/httpd -v

Server version: Apache/2.4.62 (Unix) と表示されれば成功です。

systemd サービスとして登録して起動する

ソースビルド版には systemd のサービスファイルが付属しません。以下の内容で作成します。

sudo tee /etc/systemd/system/httpd.service << 'EOF'
[Unit]
Description=Apache HTTP Server (Source Build)
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/apache2/logs/httpd.pid
ExecStart=/usr/local/apache2/bin/apachectl start
ExecReload=/usr/local/apache2/bin/apachectl graceful
ExecStop=/usr/local/apache2/bin/apachectl stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now httpd

enable --now は自動起動の登録と即時起動を同時に行います。ExecReloadapachectl graceful を指定しているため、systemctl reload httpd で設定を無停止リロードできます。

起動直後に設定ファイルを確認すると AH00558: httpd: Could not reliably determine the server's fully qualified domain name という警告が出ることがあります。これは /usr/local/apache2/conf/httpd.confServerName が未設定のためです。

# /usr/local/apache2/conf/httpd.conf を編集
# ServerName www.example.com:80 の行を有効化するか、以下を追記
ServerName localhost

動作確認とファイアウォールの設定

systemctl status httpd
curl -I http://localhost/

レスポンスに Server: Apache/2.4.62 (Unix) が含まれていれば正常に稼働しています。

外部からのアクセスを許可するにはファイアウォールの開放が必要です。

Rocky Linux / RHEL 系(firewalld)

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Ubuntu 系(ufw)

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

ドキュメントルートのデフォルトは /usr/local/apache2/htdocs/ です。動作確認用の index.html がすでに配置されているので、ブラウザから IP アドレスを開いて「It works!」が表示されれば導入完了です。

ある運用現場では、アップデートのたびに /usr/local/src に新バージョンを展開し、configure オプションを記録したシェルスクリプトを残しておくことで、差分確認と再ビルドの手間を大幅に削減していました。ソースビルドを継続運用するなら、ビルドコマンドをスクリプト化して git 管理しておくことを推奨します。

<PR>この記事に関連するおすすめ書籍

[改訂第3版]シェルスクリプト基本リファレンス

移植性の高いシェルスクリプトを書くための逆引きリファレンス。運用スクリプトの信頼性を高めたい方に。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次