前回、RockyLinux9.7をインストールし、WindowsターミナルでSSH接続できるようになりました
今回は、Apache、MariaDB、PHPをインストールし、WordPressを起動させます
筆者の環境ではすでに自宅内で、Wordpress(このブログサイト)は起動しているのでテスト環境として、仮にwww2.hogehoge.com で設定を行っています
この仮ドメインは、実際のドメインに変更してご利用ください。
Apache
コピペで設定できるように、まとめます
詳細は、こちらを参照してください

Remi リポジトリのインストール
ApacheやPHPの最新バージョンにも対応したいので、Remi リポジトリのインストールします
Remiのインストールには、「crb」や「epel」のインストールが必要なようです
sudo dnf config-manager --set-enabled crb
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm
httpdインストール
続いて、httpd関連をインストールし、自動起動するように設定します
sudo dnf install httpd httpd-tools mod_ssl
sudo systemctl start httpd
sudo systemctl enable httpd
sudo systemctl is-enabled httpd
sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled)
Active: active (running) since Sat 2026-04-18 17:24:47 JST; 54min ago
active (running)とservice; enabledで確認できます。
Firewalld に許可
「http」と「https」を許可します
sudo firewall-cmd --add-service=http --zone=public --permanent
sudo firewall-cmd --add-service=https --zone=public --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all --zone=public
「services: 」で確認できます
public (active)
target: default
icmp-block-inversion: no
interfaces: wlp8s0
sources:
services: cockpit dhcpv6-client http https ssh
ブラウザのアドレスバーにIPアドレス「http://192.168.*.*」をに入力すれば、テストページが表示されれば動作しています
httpd.conf
サーバー上のディレクトリや、ホスト名など、自分の環境に合わせて設定ファイルを編集します
筆者の場合、「DocumentRoot」を「/home/www/html」に変更します
「ServerName」は、バックアップ用なので本サーバーとの識別のためドメイン名は
「www2」とし「www2.hogehoge.com」に設定します
CGIスクリプトを使用する場合では、AddHandlerでスクリプトの拡張子を指定し、ScriptAlias以外のディレクトリにスクリプトを置く場合には、その指定ディレクトリに「Options ExecCGI」を追加します
まずは、設定ファイル「httpd.conf」はバックアップを取ってから作業します
cd /etc/httpd/conf/
sudo cp -p httpd.conf httpd.conf.org
sudo vi ./httpd.conf
#ServerAdmin root@localhost
ServerAdmin root@localhost
#ServerName www.example.com:80
ServerName www2.hogehoge.com:80
#DocumentRoot "/var/www/html"
DocumentRoot "/home/www/html"
#<Directory "/var/www">
<Directory "/home/www">
#<Directory "/var/www/html">
<Directory "/home/www/html">
#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
ScriptAlias /cgi-bin/ "/home/www/cgi-bin/"
#<Directory "/var/www/cgi-bin">
<Directory "/home/www/cgi-bin">
#Options Indexes FollowSymLinks
Options FollowSymLinks
#AddHandler cgi-script .cgi
# --- 2026/04/19 add by kazuban
AddHandler cgi-script .cgi
<Directory /home/www/html/script>
AllowOverride None
Options ExecCGI FollowSymLinks
Order allow,deny
Allow from all
</Directory>
筆者の場合、デフォルトにディレクトリを変更したので、そのディレクトリを作成し、所有者をapacheに変更します
sudo mkdir /home/www
sudo mkdir /home/www/html
sudo mkdir /home/www/cgi-bin
sudo chown apache.apache /home/www/html/
sudo chown apache.apache /home/www/cgi-bin/
ls -la /home/www
httpd -t
「Syntax OK」が出れば、正常に変更されています
セキュリティ対策
・テストページや「icons」一覧を非表示にする
・Apacheバージョン情報とTRACEメソッドOFF
・X-Frame-Optionsの有効を確認
・設定したドキュメントルートにindex.htmlを作成
cd /etc/httpd/conf.d
sudo cp -p welcome.conf welcome.conf.org
sudo cp -p autoindex.conf autoindex.conf.org
sudo vi ./welcome.conf
表示させたくないので、削除や名前変更もできますが、自動的に復活するらしいので、<Directory>設定は、全てコメントにしました。
autoindex.confも同様です
sudo vi autoindex.conf
httpdを再起動すると、「http://192.168.*.*」は表示されなくなっていれば正常です
sudo systemctl restart httpd
さらに、Apacheバージョン情報とTRACEメソッドもOFFにします
/etc/httpd/conf/httpd.confを編集
sudo vi /etc/httpd/conf/httpd.conf
最終行に、設定コードを追加
##--- kazuban added. 2026/04/19
ServerTokens ProductOnly
ServerSignature off
TraceEnable off
構文チェックしOKであれば、再起動します
httpd -t
sudo systemctl restart httpd
X-Frame-Optionsは、Webサイトを不正な埋め込み(クリックジャッキング攻撃)から守るために非常に重要だと言うことなので、こちらも有効になっているか確認します
「/etc/httpd/conf.modules.d/00-base.conf」に、mod_headers.soの記載があればモジュールは入っています
cat /etc/httpd/conf.modules.d/00-base.conf | grep mod_headers.so
次に、「/etc/httpd/conf/httpd.conf」の最後に、
「 Header append X-FRAME-OPTIONS “SAMEORIGIN” 」
を追加して、apacheを再起動します
sudo vi /etc/httpd/conf/httpd.conf
・
・
##--- kazuban added. 2026/04/19
ServerTokens ProductOnly
ServerSignature off
TraceEnable off
Header append X-FRAME-OPTIONS "SAMEORIGIN"
sudo systemctl restart httpd
sudo systemctl status httpd
ドキュメントルートのトップページの表示
上記セキュリティ対策でトップページが表示されなくなったので、「index.html」を作成し、簡単な表示が出るようにしておきます。
cd /home/www/html/
cat <<EOF | sudo tee index.html
<html>
<body>
<h1>This website is currently under maintenance.</h1>
</body>
</html>
EOF
sudo chown apache:apache ./index.html
httpd -t
sudo systemctl restart httpd
これで、「http://192.168.*.*」でトップページが表示されるようになりました
Let’s Encrypt証明書でhttps化
https化を行う場合には、ファイヤーウォールでの許可が必要ですが、上記ですでに許可してますから、ここでは確認だけ行います
sudo firewall-cmd --list-all --zone=public
「services: 」に「https」があれば、許可済みです
sslモジュール
「mod_ssl」も、上記でインストールされています、確認してみます
dnf list installed | grep mod_ssl
httpd -M | grep ssl
Certbot クライアントのインストール
Let’s Encryptで証明書の取得には、「Certbot」と言うソフトを利用します
パッケージの状態を確認します
dnf list --all | grep certbot
複数でてきますが、「certbot.noarch」「python3-certbot-apache.noarch」をインストールします
sudo dnf install certbot
sudo dnf install python3-certbot-apache
dnf list installed | grep certbot
証明書発行
すでにhttpdが動作している場合には、「webroot プラグイン」を使います
動作していない場合には、「Standaloneプラグイン」を使います
ただし、両方とも外部から対象のPCの80番ポートへ通信は必要です
したがって、外部(インターネット側)から、対象のドメインのが名前解決が必要です
私は、無料のサービスhttps://www.mydns.jp/ を利用させてもらっています
80番ポートは「Standalone」の場合は、certbot が占有します
「webroot」は、apacheが使います
したがって、「webroot」はwebサーバーが動作している必要がありますが、「Standalone」では停止しておく必要があります
まず、外部からの80番へのリクエストが、対象のPCアドレスへ転送されるように設定します
自宅であれば、ルーターの「ポートマッピング」などの項目で設定できると思います
次に、httpdの起動状態を確認
sudo systemctl status httpd
80番と、httpdの起動が確認できたら、certbot を起動しましょう
確認はしていませんが、権限が必要なファイルに書き込むので、「su」での起動がいいと思います
su
certbot certonly --webroot -w /home/www/html/ -d www2.hogehoge.com -d hogehoge.com
対話での設定になります
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): <------自分のEメールアドレスを入力
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y <----- 利用規約を読んでください
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y <--------- 電子フロンティア財団からEメールが届いてもいいか?
Account registered.
Requesting a certificate for www2.hogehoge.com and hogehoge.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/www2.hogehoge.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/www2.hogehoge.com/privkey.pem
This certificate expires on 2026-07-18.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
「Successfully」になれば、証明書ファイルは保管されています
証明書の設定
証明書を「/etc/httpd/conf.d/ssl.conf」で反映させます
まずは、バックアップをとってから、編集します
cd /etc/httpd/conf.d
sudo cp -p ssl.conf ssl.conf.org
sudo vi ./ssl.conf
・
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/letsencrypt/live/www2.hogehoge.com/fullchain.pem
・
・
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/letsencrypt/live/www2.hogehoge.com/privkey.pem
・
保存後、確認でOKなら、httpd再起動
sudo httpd -t
sudo systemctl restart httpd
sudo systemctl status httpd
https:// でのアクセス確認
証明書発行では80番ポーとを通しましたが、httpsでは443ポートを通してておきます
ただし、筆者の環境のように、同じLAN上にWebサーバーとアクセスPCがある場合には外部DNSを使用しないので、アクセスできない場合があります
その場合、アクセス側PCの「hosts」ファイルで設定しておくと可能になります
(windows)
(Linux)
#Server
192.168.1.100 hogehoge.com
192.168.1.100 www.hogehoge.com
#TestServer
192.168.1.101 www2.hogehoge.com
この設定後、「https://www2.hogehoge.com」で正常に「index.html」画面が表示されれば証明書は正常です
HTTP/2を利用する
詳細は、こちらを確認してください
まず、eventMPMモジュールとhttp2モジュールが必要ですが、Rocky9では、デフォルトで有効になっているようです。
確認してみます
sudo httpd -M | grep mpm
sudo httpd -M | grep http2
次に、「httpd.conf」で有効設定する予定ですが、設定前にhttp2の有効状態を確認してみました
確認は、Chromeで「https://www2.hogehoge.com」を表示後、F12キーで表示される開発ページの「Network」「Protocol」で確認できますが、筆者の環境ではすでに「h2」になっていて、http2が有効になっていました。
AIに聞いてみると、Apacheのバージョンによっては、有効になっている場合もあるが、明示的に設定をいれる事を推奨するの事なので、設定はしておこうと思います
設定は、「/etc/httpd/conf/httpd.conf」で行います
sudo vi /etc/httpd/conf/httpd.conf
最終行に追加して、httpdを再起動
・
<IfModule http2_module>
Protocols h2 http/1.1
ProtocolsHonorOrder on
</IfModule>
・
sudo systemctl restart httpd
HTTP/2有効確認
Chromeで「https://www2.hogehoge.com」を表示後、F12キーで表示される開発ページの「Network」「Protocol」で確認できますが、「Protocol」が表示されていない場合があります
・開発ページが表示された後、CTRL+R でページを更新
・もし、翻訳のダイアログが出た場合には、「日本語」にしてみます

・開発ページが更新されても、デフォルトでは「Protocol」が非表示になっている場合があります
・「Network」タブの、「Name」セル上でマウス右ボタンで、表示項目の選択ができるので「Protocol」をチェックする事で、表示されます

・表示された「Protocol」が、「h2」や「h3」になっていれば、HTTP/2で応答しています
WordPress環境構築まとめ
3
4
5
6

コメント