ApacheのSSI(Server-Side Includes)を検証してみる
ApacheのWEBページへのアクセスを検証したい時に index.html を表示させることはよくあると思います。
検証している時にふと、Apache の index.html を利用してWEBページを表示させた時にホスト名やIPアドレスを動的に表示することはできないのか疑問に思い chatgpt に聞きました。
すると、純粋な静的HTMLではできない(HTMLはサーバ側変数を解釈しないため)ですが、Apacheの機能(mod_include, PHP, CGIなど)を使えば簡単に実現できるとのことでした。
そこで今回、一番簡単そうな mod_include (SSI) を利用して検証してみたいと思います。
環境
検証環境は、Oracle Cloud Infrastructure の Oracle-Linux-9.6-2025.09.16-0 を使用しています。
事前準備:WEBサーバのインストールと確認
Apache HTTPサーバーをインストールします。「Complete!」が表示されればインストールは完了しています。
sudo yum -y install httpd
サービスを起動して、OSを再起動してもサービスが自動起動するよう設定します。
sudo systemctl start httpd
sudo systemctl enable httpd
サービスが起動しているか確認しておきます。
sudo systemctl status httpd

firewalldでポート番号を指定して、80番ポート(http)と443番(https)ポートをオープンします。「success」が表示されれば成功しています。
sudo firewall-cmd –permanent –add-port=80/tcp
sudo firewall-cmd –permanent –add-port=443/tcp
firewalldをリロードして設定を反映します。
sudo firewall-cmd –reload
index.html ファイルを作成し、「WEBサーバ1号機」と表示されるようにします。
sudo touch /var/www/html/index.html
sudo vi /var/www/html/index.html

ブラウザでアクセスしてindex.htmlが表示されました。

SSI(Server-Side Includes)の設定
サイトのルートに SSI を有効化するため、/etc/httpd/conf/httpd.conf の ブロックを2箇所編集します。
■編集前
Directory “/var/www/html” ディレクティブ

IfModule dir module ディレクティブ

■編集後
Directory “/var/www/html” ディレクティブ


IfModule dir module ディレクティブ

※index.shtmlの追記を忘れるとApache初画面が表示されます。
index.shtml ファイルの作成
事前に作成していた index.html を index.shtml にリネームします。
sudo mv /var/www/html/index.html /var/www/html/index.shtml
index.shtml の中身を編集して、以下のとおりに書き換えます。
sudo vi /var/www/html/index.shtml
<html>
<head><title>LB backend check</title></head>
<body>
<h1>Backend identification (SSI)</h1>
<p>Hostname: <!--#echo var="SERVER_NAME" --></p>
<p>Server IP: <!--#echo var="SERVER_ADDR" --></p>
<p>Client IP: <!--#echo var="REMOTE_ADDR" --></p>
<p>Time: <!--#echo var="DATE_LOCAL" --></p>
</body>
</html>
上記それぞれの <!–#echo var=”~” –> は、「サーバが持っている環境変数をページ内に表示せよ」という意味になります。

Apacheを再起動します。
sudo systemctl restart httpd
動作確認
ブラウザでアクセスすると設定した情報が動的に表示されました!「Hostname」は、Apache で「ServerName localhost」を指定していないため、自動で一時的にIPアドレスが表示されています。

まとめ
ApacheのSSI(Server-Side Includes)を利用して動的にホスト名やIPアドレスを表示することができました。これをAWSやOCIのオートスケーリングで展開されるWEBサーバへ仕込んでロード・バランサ配下で負荷分散されていることを確認したいと思います。
以下、他の記事をまとめた一覧です。