ホームページ >バックエンド開発 >PHPチュートリアル >nginx変数
詳細な原文はこちらをご覧ください: http://blog.sina.com.cn/s/blog_6d579ff40100wk2j.html
原文を要約した別の記事については、こちらをご覧ください: http://blog.csdn.net /yankai0219/article/details/8070790
変数補間:
すべての Nginx 変数は、 で参照される場合に $ を使用する必要がありますNginx設定ファイルプレフィックス、 $ シンボル + 変数名を使用して新しい変数を構築します。この方法は変数補間と呼ばれます。 例:
location test{
set $a hello;
set $b "$a ,world";
echo "b: $b";
}
アクセス: curl http://localhost/test/ 出力: b: hello world 説明: 上記の set は HTTPRewriteモジュール命令、そして echo は HttpEchoModule 命令です。両方のモジュールが変数補間をサポートしていることがわかります。 しかし、すべてのモジュールが変数補間をサポートしているわけではありません。実際、命令パラメーターが「変数補間」を許可するかどうかは、命令の実装モジュールによって異なります。
変数を使用する際の注意点:
変数の直後に他の文字列が続く場合は、{}を使用して変数名を囲む必要があります。そうしないと、変数名が文字列と連結されます。次の文字列を変数名としてまとめます 例:
location /test {set $variable "hello"
変数は最初に作成してから使用する必要があります。そうしないとエラーが発生します。報告される
例:
server {
Listen 80;
location /test
{ ;
}
}
アクセス:
curl
http://localhost/test/エラー:
[emerg] 不明な "foo" 変数説明: nginxnginxの作成と割り当て変数まったく異なる時間段階で発生します。 Nginx変数の作成は、 Nginx設定がロードされるとき、または Nginxが開始されるときにのみ発生しますが、割り当て操作はリクエストが実際に処理されるときにのみ発生します。これは、変数を作成せずに直接使用すると起動エラーが発生することを意味し、新しい Nginx 変数を動的に作成できないことも意味します 変数の可視性: 一度 Nginx
変数が作成されると、その変数名の表示範囲は Nginx設定全体であり、異なる仮想ホストの サーバー
設定ブロックにまたがることもできます。 例: server { listen 80;location /foo {
echo "foo = [$foo]";
}
location /bar {
set $foo 32;
echo "foo =[$foo]";
}
}
説明: ここでは、
set
コマンドを使用して変数$foo
を の場所 /bar に作成します。これにより、この変数は設定ファイル全体で表示されるため、 の場所に設定できます/foo Nginx がエラーを報告することを心配することなく、 でこの変数を直接参照できます。 これら 2 つのインターフェイスにアクセスした結果:
$カール'http://localhost/foo' foo = [] $カール'http://localhost/bar' foo = [32] $curl 'http://localhost/foo' foo = []
この例から派生した別の変数機能:
Nginx Vari有能な名前ですが、可視スコープは設定全体であり、各リクエストには、相互に干渉することなく、すべての変数の独立したコピー、または各変数が値を保存するために使用するコンテナの独立したコピーが含まれます。 たとえば、先ほど /bar インターフェースをリクエストした後、$foo 変数には値 32 が割り当てられましたが、それは /foo への後続のリクエストには影響しません。 インターフェイスすべて。対応する $foo 値 (まだ空です!)。各リクエストには $foo 変数の独自のコピーがあるためです。これは Nginx で最も一般的です。 初心者 間違いの1つは、 Nginx変数をリクエスト間でグローバルに共有されるもの、または「グローバル変数」として理解することです。実際、Nginx変数の有効期間はリクエスト境界を越えることはできません
共通の組み込み変数:
$uri:location /test {
echo "uri = $uri";
echo "request_uri =$request_uri";
}
リクエストとレスポンス:
$カール ' http://localhost:8080/test'
uri = /test
request_uri = /test
$curl 'http://localhost:8080/test ?a=3&b =4'
uri = /test
request_uri = /test?a=3&b=4
$curl 'http://localhost:8080/test/hello%20world? a=3&b=4'
uri = /test/hello world
request_uri = /test/hello%20world?a=3&b=4
$arg_xxx
変数グループ: 取得に使用されます。現在のリクエスト内のxxxという名前のURIパラメータの値
location /test {
echo "name:$arg_name";
echo "class :$ arg_class";
}
リクエストとレスポンス:
$curl 'http://localhost:8080/test'
name:
クラス:
$カール'http://localhost:8080/test?name=Tom&class=3'
name: Tom
class: 3
$カール 'http://localhost:8080/test?name=hello%20world&class=9'
name: hello%20world
class: 9
実は
$arg_name それだけではありません name パラメータと一致するか、 NAME パラメータ、または Name などと一致することもできます。Nginx は、一致する前に元のリクエストのパラメータと自動的に一致します。パラメータ名 名前をすべて小文字に調整します:
$curl 'http://localhost:8080/test?NAME=Marry'
name: Marry
class:
$カール 'http://localhost:8080/test?Name=Jimmy'
name: Jimmy
class:
$cookie_xxx変数グループ: cookie値を取得するために使用されます
$http_xxx変数グループ: リクエストヘッダーの値を取得するために使用されます
$send_http_xxx変数グループ: に使用されます応答ヘッダーを取得します
$args: の値は、現在のリクエストの URL パラメータ文字列 (つまり、リクエスト URL 内の疑問符の後の部分) を返します
上記では、nginx 変数をその側面も含めて紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。