openrestyの実装プロセスの割り当て相を書き換える33--2 openresty開発シリーズ

割り当てプロセスを書き換えopenresty開発シリーズ33--2はopenrestyステージ実行

a)のフェーズ割り当て書き換え可能な

1)set_by_lua

set_by_lua $ RES <LUAスクリプト:構文 -str> [$ ARG1 $ arg2の...]
場合は、サーバー、サーバー:コンテキストを、場所、場所ならば
、ステージ:書き換え

我々は命令が責任を割り当てロジックを達成することが困難である場合でも、使用する命令セットnginxの変数、設定、

指定された実行のluaスクリプトコードに渡されたパラメータをし、解像度に戻り値を取得します。
<LUAスクリプト-STR> ngx.argテーブル(1から始まるインデックス順)からの入力パラメータを取るコード。

操作nginxの中のイベント処理ループはブロックされた状態であるため、この指令は、短期、高速走行コードを実行することです。
時間のかかるコードは避けるべきです。
API次のこの段階で禁止:
1、出力API(ngx.sayとngx.send_headers);
2、コントロールAPI(ngx.exit);
3、サブリクエストAPI(ngx.location.captureとngx.location.capture_multi)。 ;
4、cosocketのAPI(ngx.socket.tcpとngx.req.socket)
。5、SLEEPのAPI(ngx.sleep)

A、プロファイルnginx.conf

位置/ LUA {
    $ SETジャンプ「1」;
    $ジャンプエコー;
}

SETコマンドは変数を割り当てることが、いくつかのシーンの割り当て業務が複雑で、必要のluaスクリプトを使用する
ので、使用set_by_luaの

B、追加の知識ポイント:

ngx.var.argとNGXを.req.get_uri_args区別、リクエストパラメータを取得することが可能である

両方取得要求URIパラメータのngx.var.arg_xxとngx.req.get_uri_args [「XX」]
例えばhttp://pureage.info?strider = 1
の入力を取得するストライダーパラメータは、次の2つの方法がある:

ローカルストライダー= ngx.var.arg_strider

ローカルストライダーのngx.req.get_uri_argsの=は、[「ストライダー」]

の差があり、その場合、リクエストURIパラメータで同じ名前の複数ngx.var.arg_xxアプローチ最初の値が表示された取ることです
ngx.req_get_uri_args [「XX」を表に戻すことであり、テーブルは、パラメータの値のすべてに格納され

、例えば、URIの要求します。http:/ /pureage.info?strider=1&strider=2&strider=3&strider=4場合

ngx.var.arg_striderが"1"、及びngx.req.get_uri_args [ "ストライダー"表の値である[ "1"、 "2" 、 "3"、 "4"]。
したがって、ngx.req.get_uri_argsはngx.var.arg_強化属しています。

-------------------------------
ケースの要件:書店は、前の要求に、8件の商品に対する前SKUIDを取り戻しますページ、新しいページへの9つの要求のために
本商品の詳細ページのビットを美化、形質転換されている。時間のラインは、突然;;造園コンセプトABページを切り替えていないん
商品は新商品の新しい本を入力してください古いページとメンテナンス本商品の詳細ページの前に詳細ページ、

前のIDブック8つの新しい本IDは9であるため

    、ルート/データ/ WWW / HTML;

        LOCATION /ブック{

                set_by_lua $変換to_type「
                        ローカルSKUID = NGX .var.arg_skuid
                        ngx.log(ngx.ERR、 "SKUID ="、SKUID)
                        局所= R&LT ngx.re.match(SKUID、 "^ [0-9] {} $ 8")
                        ローカルK = ngx.re.マッチ(SKUID、 "^ [0-9] {} $ 9")
                        、次いでR&LT IF
                                リターン」1"

                        次いで、Kは、IF
                                リターン"2"
                        END;
                「;

                IF(「1"変換to_type $ =){
                        エコー"は8ビットをSKUID";
                        proxy_pass http://127.0.0.1/old_book/$arg_skuid.html;
                }
                IF($の変換to_type = { "2")
                        エコー"が9としてSKUID";
                        proxy_pass http://127.0.0.1/new_book/$arg_skuid.html;
                }

        }


#特定のウェブコンテンツ
[ルート@のNODE5データ]#ツリー / WWW /データ/ HTML /
/データ/ WWW / HTML /
├──new_book
│└──123456789.html
└──old_book
    12345678.html└──

2ディレクトリ、2つのファイルの
[ノード5 @ルートデータ] /data/www/html/old_book/12345678.html CATの#
古書<の/ H1> <H1の>
[ノード5 @ルートデータ]#のCAT /データ/www/html/new_book/123456789.html
<H1>新しい新しい</ H1>ブック


#テスト訪問ます:http:?//10.11.0.215/book SKUID = 123456789
new_bookにジャンプします/ 123456789.html

訪れます。http:/ /10.11.0.215/book?skuid=12345678は
new_book / 12345678.htmlにジャンプします

=============================== ========

2)set_by_lua_fileの

文法set_by_lua_file $ VAR lua_file ARG1 ARG2 ...;

Luaのコード内のすべての複雑なロジックを実現することができますが、高速で実行するために、ブロックされません。

LOCATION / lua_set_1 {
    default_type「テキスト/ HTML「;
    $ NUMの/usr/local/luajit/test_set_1.lua set_by_lua_file;
    $ NUMエコー;
}

2.1、test_set_1.lua

ローカルuri_argsの= ngx.req.get_uri_args()
ローカルuri_args I = [ "I"]または0
ローカルuri_args J = "J"]または0

リターンIは、Jを+

パラメータ追加要求を取得し、次いで戻ります。

テストのためのhttp://192.168.31.138/lua_set_1?i=1&j=10アクセスとして。私たちは、命令の純粋なセットを使用している場合は、それを達成することができません。

3)変数をnginxのが、インターフェイスは、この問題ngx.varを解決するために使用され得るこのコマンドは一度しか書き込むことができることに注意:

LOCATION / FOO {
    差分$「を設定」;
    set_by_lua $ SUM '
        32 =ローカル
        = 56ローカルBである
        NGX。 var.diff = - B; -デフの$で書かれた
        リターンA + Bは、 - $の合計に返されます
    「;
    "SUM = $和、デフデフ$ ="エコー;
}

おすすめ

転載: www.cnblogs.com/reblue520/p/11446354.html