モジュール ngx_http_ssi_module

設定例
ディレクティブ
     ssi
     ssi_last_modified
     ssi_min_file_chunk
     ssi_silent_errors
     ssi_types
     ssi_value_length
SSIコマンド
埋め込み変数

ngx_http_ssi_moduleモジュールは、それを通過するレスポンス内のSSI(Server Side Includes)コマンドを処理するフィルターです。現在、サポートされているSSIコマンドのリストは不完全です。

設定例

location / {
    ssi on;
    ...
}

ディレクティブ

構文 ssi on | off;
デフォルト
ssi off;
コンテキスト httpserverlocationif in location

レスポンスでのSSIコマンドの処理を有効または無効にします。

構文 ssi_last_modified on | off;
デフォルト
ssi_last_modified off;
コンテキスト httpserverlocation

このディレクティブはバージョン1.5.1で追加されました。

SSI処理中に元のレスポンスからの「Last-Modified」ヘッダーフィールドを保持し、レスポンスのキャッシングを容易にします。

デフォルトでは、処理中にレスポンスの内容が変更され、動的に生成された要素または元のレスポンスとは独立して変更される部分を含む可能性があるため、ヘッダーフィールドは削除されます。

構文 ssi_min_file_chunk size;
デフォルト
ssi_min_file_chunk 1k;
コンテキスト httpserverlocation

sendfileを使用して送信することが理にかなう、ディスクに保存されたレスポンスの部分の最小sizeを設定します。

構文 ssi_silent_errors on | off;
デフォルト
ssi_silent_errors off;
コンテキスト httpserverlocation

有効にすると、SSI処理中にエラーが発生した場合、「[an error occurred while processing the directive]」文字列の出力が抑制されます。

構文 ssi_types mime-type ...;
デフォルト
ssi_types text/html;
コンテキスト httpserverlocation

text/html」に加えて、指定されたMIMEタイプを持つレスポンスでのSSIコマンドの処理を有効にします。「*」という特殊な値は、任意のMIMEタイプに一致します(0.8.29)。

構文 ssi_value_length length;
デフォルト
ssi_value_length 256;
コンテキスト httpserverlocation

SSIコマンドのパラメーター値の最大長を設定します。

SSIコマンド

SSIコマンドは、次の一般的な形式を持ちます

<!--# command parameter1=value1 parameter2=value2 ... -->

次のコマンドがサポートされています

block
includeコマンドのスタブとして使用できるブロックを定義します。ブロックには他のSSIコマンドを含めることができます。このコマンドには次のパラメーターがあります
name
ブロック名。
<!--# block name="one" -->
stub
<!--# endblock -->
config
SSI処理で使用されるいくつかのパラメーターを設定します。具体的には
errmsg
SSI処理中にエラーが発生した場合に出力される文字列。デフォルトでは、次の文字列が出力されます
[an error occurred while processing the directive]
timefmt
日付と時刻の出力を目的としてstrftime()関数に渡されるフォーマット文字列。デフォルトでは、次の形式が使用されます
"%A, %d-%b-%Y %H:%M:%S %Z"
%s」形式は、秒単位で時刻を出力するのに適しています。
echo
変数の値を出力します。このコマンドには次のパラメーターがあります
var
変数名。
encoding
エンコード方法。可能な値にはnoneurlentityがあります。デフォルトではentityが使用されます。
default
変数が未定義の場合に出力される文字列を設定する非標準パラメーター。デフォルトでは「(none)」が出力されます。このコマンドは
<!--# echo var="name" default="no" -->
次のコマンドシーケンスを置き換えます
<!--# if expr="$name" --><!--# echo var="name" --><!--#
       else -->no<!--# endif -->
if
条件付きインクルージョンを実行します。次のコマンドがサポートされています
<!--# if expr="..." -->
...
<!--# elif expr="..." -->
...
<!--# else -->
...
<!--# endif -->
現在、ネストレベルは1レベルのみサポートされています。このコマンドには次のパラメーターがあります
expr
式。式は次のことができます
  • 変数の存在チェック
    <!--# if expr="$name" -->
    
  • 変数とテキストの比較
    <!--# if expr="$name = text" -->
    <!--# if expr="$name != text" -->
    
  • 変数と正規表現の比較
    <!--# if expr="$name = /text/" -->
    <!--# if expr="$name != /text/" -->
    
textに変数が含まれる場合、その値が代入されます。正規表現には、後で変数を使用して使用できる位置指定キャプチャと名前付きキャプチャを含めることができます。たとえば
<!--# if expr="$name = /(.+)@(?P<domain>.+)/" -->
    <!--# echo var="1" -->
    <!--# echo var="domain" -->
<!--# endif -->
include
別のリクエストの結果をレスポンスに含めます。このコマンドには次のパラメーターがあります
file
インクルードするファイルを指定します。たとえば
<!--# include file="footer.html" -->
virtual
インクルードするリクエストを指定します。たとえば
<!--# include virtual="/remote/body.php?argument=value" -->
1ページに指定された複数のリクエストは、プロキシされたサーバーまたはFastCGI/uwsgi/SCGI/gRPCサーバーによって並列に処理されます。逐次処理が必要な場合は、waitパラメーターを使用する必要があります。
stub
インクルードされたリクエストが空のボディを返す場合、またはリクエスト処理中にエラーが発生した場合に出力されるブロックの名前を指定する非標準パラメーター。たとえば
<!--# block name="one" -->&nbsp;<!--# endblock -->
<!--# include virtual="/remote/body.php?argument=value" stub="one" -->
置換ブロックの内容は、インクルードされたリクエストのコンテキストで処理されます。
wait
SSI処理を続行する前にリクエストが完全に完了するまで待機するよう指示する非標準パラメーター。たとえば
<!--# include virtual="/remote/body.php?argument=value" wait="yes" -->
set
リクエスト処理の成功した結果を指定された変数に書き込むよう指示する非標準パラメーター。たとえば
<!--# include virtual="/remote/body.php?argument=value" set="one" -->
レスポンスの最大サイズは、subrequest_output_buffer_sizeディレクティブ(1.13.10)で設定されます。
location /remote/ {
    subrequest_output_buffer_size 64k;
    ...
}
バージョン1.13.10より前では、ngx_http_proxy_modulengx_http_memcached_modulengx_http_fastcgi_module(1.5.6)、ngx_http_uwsgi_module(1.5.6)、ngx_http_scgi_module(1.5.6)モジュールを使用して取得されたレスポンスの結果のみを、変数に書き込むことができました。レスポンスの最大サイズは、proxy_buffer_sizememcached_buffer_sizefastcgi_buffer_sizeuwsgi_buffer_sizescgi_buffer_sizeディレクティブで設定されていました。
set
変数の値を設定します。このコマンドには次のパラメーターがあります
var
変数名。
value
変数値。割り当てられた値に変数が含まれる場合、その値が代入されます。

埋め込み変数

ngx_http_ssi_moduleモジュールは、2つの埋め込み変数をサポートしています

$date_local
ローカルタイムゾーンの現在時刻。形式は、configコマンドのtimefmtパラメーターで設定されます。
$date_gmt
GMTの現在時刻。形式は、configコマンドのtimefmtパラメーターで設定されます。