ホームページ  >  記事  >  バックエンド開発  >  nginx変数

nginx変数

WBOY
WBOYオリジナル
2016-08-08 09:26:501152ブラウズ

詳細な原文はこちらをご覧ください: 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モジュール命令、そして echoHttpEchoModule 命令です。両方のモジュールが変数補間をサポートしていることがわかります。 しかし、すべてのモジュールが変数補間をサポートしているわけではありません。実際、命令パラメーターが変数補間を許可するかどうかは、命令の実装モジュールによって異なります。

変数を使用する際の注意点:

変数の直後に他の文字列が続く場合は、

{}を使用して変数名を囲む必要があります。そうしないと、変数名が文字列と連結されます。次の文字列を変数名としてまとめます 例:

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:
は現在のリクエストされた
URI (デコードされており、リクエスト パラメーターが含まれていません) $request_uri:
は、元の
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 チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。