概要
RHEL系(AlmaLinux / Rocky Linux 9等)にWebサーバーApacheをインストールします。最近のトレンドはNginxではあるものの、以下のメリットを考慮してApacheを選択します。
- 豊富なモジュールとカスタマイズ: 歴史が長く、情報の蓄積が膨大。
- 動的コンテンツの設定のしやすさ: PHP等との親和性が高い。
- 運用の手軽さ: 小規模サイトを迅速に立ち上げるのに適している。
- 高度なセキュリティ・ログ設定:
- 自宅等からのアクセスログを除外するなどのログカスタマイズ。
- 悪質なクローラーの排除。
mod_security(WAF)による防御。
さっくりとした手順
- firewalldの設定: 外部からのアクセス許可を与えます。
- Apacheのインストール:
dnfを使用してインストールします。 - Apacheの設定: セキュリティとサーバー名の設定を行います。
- 設定の反映確認: 正常に動作しているかチェックします。
1. firewalldの設定
サーバー移設などでハマりやすいのが「設定は正しいのにページが表示されない」現象です。RHEL系ではデフォルトで強力なファイアウォール(firewalld)が動作しており、ポート80/443を明示的に開放する必要があります。
大前提
SSH接続(ポート22)は許可されている前提で進めます。設定を誤るとリモート操作ができなくなるため、慎重に行いましょう。
- HTTP通信を許可する
sudo firewall-cmd --permanent --add-service=http
- HTTPS通信を許可する
sudo firewall-cmd --permanent --add-service=https
- 設定を反映させる
sudo firewall-cmd --reload
- 設定を確認する
sudo firewall-cmd --list-all
services の欄に http と https が含まれていればOKです。
2. インストールを行います
RHEL系ではApacheのパッケージ名は httpd です。
- パッケージ全体のアップデート
sudo dnf update -y
- Apache (httpd) のインストール
sudo dnf install httpd -y
- バージョン確認
httpd -v
-(表示例)-Server version: Apache/2.4.57 (AlmaLinux)
- サービスの起動と自動起動設定
sudo systemctl enable --now httpd
- サービス稼働確認
systemctl status httpd
enabled と active (running) を確認します。
3. 設定を行います
- 設定ファイルのバックアップ
RHEL系の設定ファイルは /etc/httpd/conf/httpd.conf です。
sudo cp -pi /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)
※任意のバックアップディレクトリを指定してください。
- 設定ファイルのバックアップ確認
diff -u /etc/httpd/conf/httpd.conf.$(date +%Y%m%d) /etc/httpd/conf/httpd.conf
エラーがないことを確認します。
- 設定ファイルの書き換え(追記)
セキュリティ向上のため、署名の非表示化とサーバー名を追記します。
sudo bash -c "cat >> /etc/httpd/conf/httpd.conf" << 'EOF'
# Custom Settings
ServerSignature Off
ServerTokens Prod
ServerName example.com:80
EOF
※ example.com の部分は、ご自身のドメイン名またはホスト名に置き換えてください。
- 差分の確認
diff -u /etc/httpd/conf/httpd.conf.$(date +%Y%m%d) /etc/httpd/conf/httpd.conf
末尾に指定した3行が追加されていることを確認します。
4. 設定反映を確認します
- 構文確認
sudo httpd -t
Syntax OK と表示されることを確認します。
- サービス再起動
sudo systemctl restart httpd
- 設定の反映確認(ヘッダー確認)
curl -I http://localhost
以下のように、Server ヘッダーが Apache のみ(バージョン情報なし)になっていれば成功です。
HTTP/1.1 200 OK
Date: ...
Server: Apache
...