Apache2でSSIを有効にする
概要
Linux環境のApache2で、SSI (Server Side Includes)を有効にする手順。SSIディレクティブの書き方については触れない。
SSIが必要となる機会は昔と比べて減っていると思われるが、諸事情で検証環境を作ることになった。Apache HTTP Server Projectでは、公式に「Apache チュートリアル: Server Side Includes 入門」というコンテンツを提供してくれているが、このページの情報だけでは構築完了に至らないので、作業の記録。
環境
- Debian 9.13 (WSL2)
- Apache 2.4.25
- PHP 7.0.33 (
.php
をここでの検証対象としたため利用。SSI有効化とは無関係。)
手順
Apache2のインストール
ここでは明示的にバージョン指定せずに、Apache2をインストールする。Debian系以外の場合は、コマンドを読み替える。
# apt install apache2
# apache2 -version
Server version: Apache/2.4.25 (Debian)
Server built: 2019-10-13T15:43:54
モジュールの有効化
SSIを動作させるのに必要なモジュールを有効にする。mod_include
を有効にすればSSIは動作するが、#exec
によりOSコマンドも動かす場合は追加でmod_cgi
モジュールも必要となる。
公式のチュートリアルでは「httpd.conf
への設定が必要」と書かれているが、先ほどの方法でApacheをインストールすると、そのようなファイルは存在しない。主な設定は/etc/apache2/apache2.conf
に記述されており、標準設定では、以下の通りmods-enabled
配下のモジュールをIncludeしている。
# Include module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
mods-enabled
配下の*.load
や*.conf
はmods-available
配下へのシンボリックリンクである。また、mods-available
配下のファイルもモジュールそのものではなく、/usr/lib/apache2/modules/
配下のモジュールをそれぞれIncludeする作りとなっている。
そのため、自分でシンボリックリンクを作っても動くが、モジュールを有効化するコマンドa2enmod
を使用して、設定を書き換える。
# a2enmod include
Considering dependency mime for include:
Module mime already enabled
Enabling module include.
To activate the new configuration, you need to run:
service apache2 restart
# a2enmod cgi
Your MPM seems to be threaded. Selecting cgid instead of cgi.
Enabling module cgid.
To activate the new configuration, you need to run:
service apache2 restart
これにより次回以降の起動時はモジュールmod_include
とmod_cgi
が読み込まれる。
SSIを許可するディレクトリの設定
今回は、http://localhost/ssi/
の下でだけSSIが動けばよいと仮定。サーバ上のディレクトリでいうと、/var/www/html/ssi/
が相当する。また、サーバサイドはPHPを使い、拡張子.php
でSSIを動作させたいと仮定する。
/etc/apache2/sites-available/
配下の000-default.conf
をエディタで開き、<VirtualHost>
タグ内に下記の記述を追加する。
<Directory /var/www/html/ssi/>
Options Includes
AddType text/html .php
AddOutputFilter INCLUDES .php
</Directory>
SSIを含むファイルの配置
/var/www/html/ssi/
に新しいphpファイルを作成する。
<!-- #printenv -->
<?php
phpinfo();
Apacheを起動または再起動後にURLhttp://localhost/ssi/new.php
へアクセスすると、printenv
により環境変数の一覧が表示され、また、PHPも問題なく動作しているはずだ。
Discussion