ユーザー定義変数の使い方
Nginx では、あらかじめ定義された組み込み変数だけでなく、新しい変数を自分で定義して使用することもできます。これらの変数はユーザー定義変数と呼ばれます。ここでは Nginx におけるユーザー定義変数の使い方を解説します。
変数を定義する
ユーザーが定義する変数で使用する変数名は、組み込み変数と同じく次のような書式となっています。
$変数名
$ から始まり、そのあとに変数名が続きます。変数名で使用できる文字は、アルファベット、数値、アンダースコア(_)です。
変数を使用するには、あらかじめ set ディレクティブで値を設定する必要があります。
Syntax: set $variable value; Default: — Context: server, location, if
set ディレクティブは server、 location、 if コンテキストに記述します。
変数に値を設定するには、次のように記述します。
set $変数名 "値";
変数には、文字列、他の変数(組み込み変数やユーザー定義変数)、またはそれらを組み合わせた値を設定できます。値はダブルクオーテーションで囲って指定してください。(囲うのは必須ではないのですが、値にスペースやセミコロンが入っている場合は必須となります)。
変数は定義されたコンテキスト内で利用できます。なお Nginx の変数はリクエストごとに評価され、リクエストが完了すると破棄されます。
変数への値の設定方法
変数に文字列を設定するには次のように記述します。
set $msg "Hello";
一度設定した変数には、後から別の値を再設定することもできます。
set $msg "Hello"; set $msg "Bye";
別の変数の値を設定するには次のように記述します。
set $data "Hello"; set $msg "$data";
変数 $msg には、変数 $data に設定されていた "Hello" が設定されます。
変数に文字列と別の変数を組み合わせて設定することもできます。
set $code "708"; set $msg "No $code";
値の中に別の変数を記述した場合、別の変数の値が展開されます。この場合、変数 $msg には "No 708" が設定されます。
なお、変数に別の値を加えて同じ変数に再設定することもできますが、同じ変数を参照して値を設定する場合には注意が必要です。変数名を { と } でくくり、どこまでが変数かを明確にしてください。
set $code "708";
set $code "No ${code}";
変数と文字列の区切りについて
文字列と変数を組み合わせた値を設定する場合、変数の直後にアルファベットなどで始まる文字列を続けて記述すると、どこまでが変数名か判別できなくなります。
例えば変数 $col の直後に文字列 "box" を続けた値を別の変数に設定してみます。
set $col "blue"; set $msg "$colbox";
変数と文字列の区切りがないため、このように記述してしまうと変数 $colbox として解釈されます。
変数名として使用できる文字は、アルファベット、数値、アンダースコア(_)ですので、これら以外の文字(スペース、スラッシュ、カンマ、ハイフン、改行など)が変数名の直後にあればどこまでが変数なのか区別できます。
set $col "blue"; set $msg "$col/box";
最初の例のように変数の直後に変数名で使用できるアルファベットなどの文字列がすぐに続く場合には、変数がどこまでか区別できるように変数名を { と } でくくってください。
${変数名}
先ほどの例は、次のように記述することで、正しく処理されます。
set $col "blue";
set $msg "${col}box";
ユーザー定義変数を使ってみる
それでは、実際にユーザー定義変数を使ってみます。クライアントからリクエストがあったときに、その IP アドレスを返します。
Nginx の設定ファイルである nginx.conf ファイルで http コンテキストに次のように設定しました。(必要な部分のみの抜粋です)。
http {
server {
root html;
location / {
default_type text/plain;
set $msg "Your IP is $remote_addr";
return 200 "$msg\n";
}
}
}
default_type ディレクティブでテキストとして結果を返すように設定しています。そして return ディレクティブでステータスコード 200 とユーザー定義変数 $msg の値を返します。
ユーザー定義変数 $msg には、文字列と組み込み変数 $remote_addr を組み合わせた値を設定しています。
ブラウザを起動し、次の URL へアクセスします。
http://localhost/
次のような結果が表示されます。
Your IP is 127.0.0.1
ユーザー定義変数を使った簡単な例を紹介しました。
-- --
Nginx におけるユーザー定義変数の使い方を解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。