ApacheでSSI(サーバーサイドインクルード)を有効化する方法

Apache

ども!いっとくです!

初めてSSI(サーバーサイドインクルード)というものの設定をしました。いつまでやっても知らないことが出てきますね〜

環境は以下の条件でやっています。

  • Cent OS 7.5
  • Apache2.4.6
スポンサーリンク

SSI(サーバーサイドインクルード)って何よ?

まずはSSIとは何かという話から。

例えばこんな感じの構成でHTMLが配置されていたとさ。

html
├ index.html
└ header.html

そしてHTMLの中がこうなっていたとさ。

index.html

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <!--#include virtual="/header.html" -->
    <main>何かあるよー</main>
    <footer>何かあるよー</footer>
</body>
</html>

header.html

<header>何かあるよー</header>

さて、index.htmlに <!--#include virtual="/header.html" --> という謎のコードがありますね。

SSIというのは、Apacheがこのコメントの部分をいい感じに解釈して、対応するファイルを結合して表示してくれるという機能の事です!

上述のような書き方をするとindex.htmlの <!--#include virtual="/header.html" --> の部分がheader.htmlの内容に変換されて結合されて最終的に呼び出すときには以下のようなHTMLを返してくれます

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <header>何かあるよー</header>
    <main>何かあるよー</main>
    <footer>何かあるよー</footer>
</body>
</html>

ただのHTMLなのにテンプレートエンジンみたいなことが出来るんですねー。便利!

これで共通ファイルを切り出すことができますね〜

SSIの設定方法

SSIはApacheの設定をすることで実装できます。

httpd.confみたいな設定ファイルに書いても出来るし、.htaccessによる上書きを許可しているのであれば、そちらでも実装できるらしい。

今回はhttpd.confで設定したので、そちらの設定方法です。

CentOS7の場合、設定ファイルが /etc/httpd/conf にあると思うので、まずはそこを編集しましょう。

$ sudo vi /etc/httpd/conf/httpd.conf

OSによって設定ファイルの位置が異なると思うので、そこは適宜環境によって合わせましょう。

httpd.confで対象のファイルが置いてあるディレクトリの設定を以下のようにします。今回の場合はよく使うであろう/var/www/htmlにソースを配置している設定です。

<Directory "/var/www/html">
    Options Includes FollowSymLinks
    AllowOverride None
    Require all granted
    AddType text/html .html
    AddOutputFilter INCLUDES .html
</Directory>

それぞれの設定内容は以下のような感じです

Options … IncludesでSSIを有効にしています。FollowSymLinksはシンボリックリンクのやつで今回のとは関係ないはず。

AllowOverride … .htaccessを許可するかどうか。SSIとは関係なさげ

Require all granted … アクセスの権限関係のやつ。これもSSIとは関係ないはず

AddType … text/html .htmlのファイルがインクルードできるようになりますよーっていう指定

AddOutputFilter … これもhtmlのファイルをインクルード出来るようにする設定。

太字のところがSSIと関係ある設定の部分です。

設定が完了したら保存して、sudo systemctl restart httpd で再起動しましょう。

動かないよーって場合はモジュールが読み込まれていない可能性があるので

$ sudo find / -name mod_include.so

でモジュールを探し、httpd.confもしくはモジュールの読み込みを記述しているconfに

LoadModule include_module モジュールのパス

を書き込んで再起動しましょう。

ちなみに僕が今回いじった環境ではモジュールのパスが /usr/lib64/httpd/modules/mod_include.so だったので

LoadModule include_module /usr/lib64/httpd/modules/mod_include.so

をconfに追記しました。

apacheのファイル触るの慣れなすぎて怖いですが、ちゃんと動くと気持ちいいですね〜

ちなみにSSIはレスポンス遅くなるらしいので、そこは注意が必要かも知れません(そこまで気にするほどでもない気はしますが)

以上、いっとくでした!よいエンジニアライフを!

コメント

タイトルとURLをコピーしました