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 を設定して有効にする

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲