2026年5月17日
2026年5月17日
CentOS/RHEL系にApacheをインストールする手順(Rocky Linux・AlmaLinux 9/10対応)
CentOS や RHEL 系の Linux に Apache HTTP Server(パッケージ名は httpd)を入れる手順を、2026年10月時点の現行 OS に合わせて説明します。以前の CentOS 7 向けの yum 手順もほぼ同じ形で動きますが、OS 自体のサポートが終わっているため、新しく構築するなら下の現行ディストリビューションを使ってください。
CentOS のサポート状況と、この記事の対象
| OS | 状況(2026年10月時点) |
|---|---|
| CentOS Linux 7 | 2024年6月30日にサポート終了。更新が出ないため新規構築には使わない |
| CentOS Linux 8 | 2021年12月31日にサポート終了 |
| CentOS Stream 9 | 2027年5月31日まで(RHEL 9 のフルサポート終了に合わせた日付) |
| CentOS Stream 10 | 2030年5月31日まで(RHEL 10 のフルサポート終了に合わせた日付) |
CentOS Linux の後継としては、RHEL(Red Hat Enterprise Linux)本体のほか、RHEL 互換の Rocky Linux や AlmaLinux がよく使われます。以下のコマンドは RHEL 9 / 10 と、その互換 OS で共通です。CentOS 7 のサーバーが残っている場合は、Apache の設定より先に OS の移行を計画してください。
手順1:httpd をインストールして起動する
# パッケージを最新にしてから httpd と mod_ssl(HTTPS 用)を入れる
sudo dnf -y update
sudo dnf -y install httpd mod_ssl
# 起動と、OS 起動時の自動起動を同時に有効にする
sudo systemctl enable --now httpd
# 状態とバージョンを確認する(RHEL 9 系は Apache 2.4 系)
systemctl status httpd --no-pager
httpd -v
systemctl status に active (running) と出れば起動しています。起動に失敗した場合は、次のコマンドで理由を確認します。
sudo journalctl -u httpd --no-pager -n 50
手順2:firewalld で HTTP と HTTPS を開ける
Web サーバーは、外部からポート80(HTTP)と443(HTTPS)に届かないと公開できません。RHEL 系の標準ファイアウォールである firewalld で、この2つを開けます。
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
# 開いているサービスを確認する
sudo firewall-cmd --zone=public --list-services
--permanent を付けないと、firewalld の再読み込みや OS の再起動で設定が消えます。クラウドサーバーでは、OS のファイアウォールとは別に、クラウド側のセキュリティグループやパケットフィルターでも80/443を許可する必要があります。
アクセスを絞るべきなのは、公開用の80/443ではなく、SSH(22番)や管理画面などの管理用の入口です。
手順3:表示を確認する
この時点ではまだ公開するファイルが無いため、Apache の初期ページが表示されます。RHEL 系の初期ページは conf.d/welcome.conf の設定で、ステータスコード403で返されます。
# 初期ページはステータス 403 で返る
curl -I http://localhost/
# 確認用のファイルを置くと 200 になる
echo 'It works' | sudo tee /var/www/html/index.html
curl -I http://localhost/
外部のパソコンのブラウザで http://サーバーのIPアドレス/ を開いて同じ内容が見えれば、ファイアウォールも通っています。
手順4:設定ファイルの場所を把握する
| 場所 | 内容 |
|---|---|
/etc/httpd/conf/httpd.conf |
本体の設定ファイル |
/etc/httpd/conf.d/*.conf |
追加の設定(IncludeOptional で読み込まれる)。サイトごとの設定はここに置く |
/etc/httpd/conf.modules.d/*.conf |
読み込むモジュールの設定 |
/etc/httpd/conf.d/ssl.conf |
mod_ssl を入れると作られる HTTPS の設定 |
/var/www/html |
既定のドキュメントルート |
/var/log/httpd/ |
access_log と error_log |
httpd.conf を直接書き換えるより、conf.d/ に自分用の .conf ファイルを追加するほうが、パッケージ更新時の差分の扱いが楽になります。
手順5:バーチャルホストを作る(WordPress を置く場合の例)
ドメインごとに設定を分けるには、conf.d/ にバーチャルホストのファイルを作ります。
# /etc/httpd/conf.d/example.com.conf
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public
<Directory /var/www/example.com/public>
# WordPress のパーマリンク用 .htaccess を有効にする
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/example.com-error.log
CustomLog /var/log/httpd/example.com-access.log combined
</VirtualHost>
sudo mkdir -p /var/www/example.com/public
# 構文を確認してから反映する(Syntax OK と出ればよい)
sudo apachectl configtest
sudo systemctl reload httpd
SELinux の設定
RHEL 系では SELinux が既定で有効です。/var/www/ 以下に作ったディレクトリは Web 公開用のラベル(httpd_sys_content_t)を引き継ぎますが、このラベルでは Apache からファイルを書き込めません。WordPress がアップロードや更新でファイルを書き込む wp-content には、書き込み可能なラベルを付けます。
# semanage が無い場合は policycoreutils-python-utils を入れる
sudo dnf -y install policycoreutils-python-utils
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/example.com/public/wp-content(/.*)?"
sudo restorecon -Rv /var/www/example.com
# ラベルを確認する
ls -Zd /var/www/example.com/public/wp-content
SELinux を無効にして問題を回避するのは避けてください。拒否の記録は sudo ausearch -m avc -ts recent で確認できます。
PHP(PHP-FPM)の導入と、Let's Encrypt による HTTPS 化は、それぞれ関連記事の手順で行います。
手順6:server-status で稼働状況を見る
http://localhost/server-status は、mod_status の設定を追加しないと表示されません(404 になります)。RHEL 系では mod_status のモジュール自体は読み込まれているので、表示する場所と、見られる相手を設定します。
# /etc/httpd/conf.d/server-status.conf
<Location "/server-status">
SetHandler server-status
# サーバー自身からのアクセスだけ許可する
Require local
</Location>
sudo apachectl configtest
sudo systemctl reload httpd
# 機械向けの簡易表示
curl "http://localhost/server-status?auto"
server-status には接続中のクライアントや要求中の URL が表示されるため、Require local のように見られる相手を絞り、外部には公開しないでください。
手順7:運用の基本設定
外部に返すバージョン情報を減らすため、次のファイルを追加します。
# /etc/httpd/conf.d/security.conf
# Server ヘッダーを「Apache」だけにする
ServerTokens Prod
# エラーページの末尾にバージョンを出さない
ServerSignature Off
sudo apachectl configtest
sudo systemctl reload httpd
# 以後の更新(httpd も OS のパッケージとして更新される)
sudo dnf -y upgrade
Apache はソースからビルドせず、OS のパッケージで入れて dnf で更新するのが基本です。ソースから入れると、セキュリティ修正を自分で追いかける必要があります。
注意事項
- 設定を変えたら、反映の前に
apachectl configtestを実行してください。構文エラーのまま再起動すると、Apache が起動せずサイト全体が止まります。 systemctl restartは接続中の処理を切ります。設定の反映だけならsystemctl reloadを使います。- ログは logrotate で定期的に回されます(設定はパッケージが置く
/etc/logrotate.d/httpd)。アクセスが多いサイトはディスク容量を監視してください。
まとめ
- CentOS Linux 7 / 8 はサポート終了。新規構築は RHEL 9 / 10、Rocky Linux、AlmaLinux などを使う
dnf install httpd mod_ssl→systemctl enable --now httpd→ firewalld で http / https を--permanentで開ける- サイトの設定は
conf.d/に置き、apachectl configtestで確認してからreloadする - WordPress の
wp-contentには SELinux のhttpd_sys_rw_content_tを付ける - server-status は
SetHandler server-statusとRequire localを設定して有効にする
関連記事: