ここでは、リクエスト処理関数の構文、説明、パラメーター、戻り値、例について記述します。
add_req_header
- 構文:
add_req_header(name, value [, append]) - 説明
この関数を呼び出して、オリジンリクエストヘッダーを追加します。
- パラメーター
name: 追加するリクエストヘッダー名。 Data type: 文字列。value: 追加するリクエストヘッダーの値。 Data type: 文字列。append: 同じ名前のリクエストヘッダーが既に存在する場合、指定されたvalueのリクエストヘッダーを追加するかを指定します。 有効値 : true、false 。 既定値 : false 。 このパラメーターで false を指定すると、指定された値のパラメーターが既存のリクエストヘッダーの値を上書きします。
- 戻り値
この関数は、既定では
trueを返し、無効なリクエストヘッダーが指定された場合はfalseを返します。 - 例
add_req_header('USER-DEFINED-REQ-1', '1') add_req_header('USER-DEFINED-REQ-1', 'x', true) add_req_header('USER-DEFINED-REQ-2', '2') del_req_header('USER-DEFINED-REQ-2') Note: Add the following request headers. USER-DEFINED-REQ-1: 1 USER-DEFINED-REQ-1: x The USER-DEFINED-REQ-2 header is added first and then deleted, so the USER-DEFINED-REQ-2 request header is not included in the origin request.
del_req_header
- 構文:
del_req_header(name) - 説明
この関数を呼び出して、オリジンリクエストヘッダーを削除します。
- パラメーター
name: 削除するリクエストヘッダー名。 Data type: 文字列。 - 戻り値
この関数は、既定では
trueを返し、無効なリクエストヘッダーが指定された場合はfalseを返します。 - 例
add_req_header('USER-DEFINED-REQ-1', '1') add_req_header('USER-DEFINED-REQ-1', 'x', true) add_req_header('USER-DEFINED-REQ-2', '2') del_req_header('USER-DEFINED-REQ-2') Note: Add the following request headers. USER-DEFINED-REQ-1: 1 USER-DEFINED-REQ-1: x The USER-DEFINED-REQ-2 header is added first and then deleted, so the USER-DEFINED-REQ-2 request header is not included in the origin request.
add_rsp_header
- 構文:
add_rsp_header(name, value [, append]) - 説明
この関数を呼び出して、レスポンスヘッダーを追加します。
- パラメーター
name: 追加するレスポンスヘッダー名。 Data type: 文字列。value: 追加するレスポンスヘッダーの値。 Data type: 文字列。次のvalueパラメーターのいずれかの式を指定して、レスポンスフェーズで値を動的に置き換えることができます。- ${x}:
ngx.var.xの値と置き換えます。 - @{y}:
response header yの値と置き換えます。
- ${x}:
append: 同じ名前のリクエストヘッダーが既に存在する場合、指定されたvalueのリクエストヘッダーを追加するかを指定します。 有効値: true、false。 既定値 : false 。 このパラメーターで false を指定すると、指定された値のパラメーターが既存のレスポンスヘッダーの値を上書きします。
- 戻り値
この関数は、既定では
trueを返し、無効なリクエストヘッダーが指定された場合はfalseを返します。 - 例
add_rsp_header('USER-DEFINED-RSP-1', '1') add_rsp_header('USER-DEFINED-RSP-1', 'x', true) add_rsp_header('USER-DEFINED-RSP-2', '2') del_rsp_header('USER-DEFINED-RSP-2') Note: Add the following response headers. USER-DEFINED-RSP-1: 1 USER-DEFINED-RSP-1: x The USER-DEFINED-RSP-2 header is added first and then deleted, so the USER-DEFINED-RSP-2 header is not included in the response.
del_rsp_header
- 構文:
del_rsp_header(name) - 説明
この関数を呼び出してレスポンスヘッダーを削除します。
- パラメーター
name: 削除するレスポンスヘッダー名。 Data type: 文字列。 - 戻り値
この関数は、既定では
trueを返し、無効なリクエストヘッダーが指定された場合はfalseを返します。 - 例
add_rsp_header('USER-DEFINED-RSP-1', '1') add_rsp_header('USER-DEFINED-RSP-1', 'x', true) add_rsp_header('USER-DEFINED-RSP-2', '2') del_rsp_header('USER-DEFINED-RSP-2') Note: Add the following response headers. USER-DEFINED-RSP-1: 1 USER-DEFINED-RSP-1: x The USER-DEFINED-RSP-2 header is added first and then deleted, so the USER-DEFINED-RSP-2 header is not included in the response.
encode_args
- 構文:
encode_args(d) - 説明
この関数を呼び出して、
dによって指定されたディクショナリのk/vペアを、k1=v1&k2=v2 の形式で URI エンコードされた文字列に変換します。 - パラメーター
d: 変換するディクショナリ。
- 戻り値
この関数は、URI エンコードされた文字列を返します。
- 例
my_args = [] set(my_args, 'signature', 'da9dc4b7-87ae-4330-aaaf-e5454e2c2af1') set(my_args, 'algo', 'private sign1') my_args_str = encode_args(my_args) add_rsp_header('X-DSL-ENCODE-ARGS', my_args_str) to_args = decode_args(my_args_str) if get(to_args, 'algo') { add_rsp_header('X-DSL-DECODE-ARGS-ALGO', get(to_args, 'algo')) } if get(to_args, 'signature') { add_rsp_header('X-DSL-DECODE-ARGS-SIGN', get(to_args, 'signature')) } Output: Add the following response headers. X-DSL-ENCODE-ARGS: signature=da9dc4b7-87ae-4330-aaaf-e5454e2c2af1&algo=private%20sign1 X-DSL-DECODE-ARGS-ALGO: private sign1 X-DSL-DECODE-ARGS-SIGN: da9dc4b7-87ae-4330-aaaf-e5454e2c2af1
decode_args
- 構文:
decode_args(s) - 説明
この関数を呼び出して、 k1=v1&k2=v2 の形式で URI エンコードされた文字列をディクショナリ型の文字列に変換します。
- パラメーター
s: 変換されるソース文字列。
- 戻り値
この関数は、変換されたディクショナリオブジェクトを返します。
- 例
my_args = [] set(my_args, 'signature', 'da9dc4b7-87ae-4330-aaaf-e5454e2c2af1') set(my_args, 'algo', 'private sign1') my_args_str = encode_args(my_args) add_rsp_header('X-DSL-ENCODE-ARGS', my_args_str) to_args = decode_args(my_args_str) if get(to_args, 'algo') { add_rsp_header('X-DSL-DECODE-ARGS-ALGO', get(to_args, 'algo')) } if get(to_args, 'signature') { add_rsp_header('X-DSL-DECODE-ARGS-SIGN', get(to_args, 'signature')) } Output: Add the following response headers. X-DSL-ENCODE-ARGS: signature=da9dc4b7-87ae-4330-aaaf-e5454e2c2af1&algo=private%20sign1 X-DSL-DECODE-ARGS-ALGO: private sign1 X-DSL-DECODE-ARGS-SIGN: da9dc4b7-87ae-4330-aaaf-e5454e2c2af1
rewrite
- 構文:
rewrite(url, flag, code) - 説明
この関数を呼び出して、書き換えまたはリダイレクト操作を実行します。
- パラメーター
- url: 書き換えルールのターゲット URI。 Data type: 文字列。
- flag パラメーターをリダイレクトまたは中断するように設定すると、URI のみが書き換えられます。 このパラメーターは、書き換え操作の後のターゲット URI を指定します。
- flag パラメーターを enhance_direct または enhance_break に設定すると、URI とパラメーターが書き換えられます。 このパラメーターは、書き換え操作後のターゲット URI とパラメーターを指定します。
- flag: 書き換えモード。 Data type: 文字列。
- redirect: URI のみの書き換え。 パラメーターは書き換えされません。 既定では、302 リダイレクトが実行されます。 このモードを指定すると、
codeパラメーターが設定可能になります。 code パラメーターの有効値:301、302 (既定)、303、307、308 。 - break: URI のみを URL に書き換えます。 パラメーターは書き換えされません。
- enhance_redirect:
redirectと同様です。 ただし、パラメーターもこのモードで書き換えられます。 - enhance_break:
breakと同様です。 ただし、パラメーターもこのモードで書き換えられます。
- redirect: URI のみの書き換え。 パラメーターは書き換えされません。 既定では、302 リダイレクトが実行されます。 このモードを指定すると、
- code: レスポンスコード。 Data type: 数値型。
このパラメーターは、flag パラメーターを redirect または enhance_redirect に設定した場合にのみ、カスタマイズすることができます。
- url: 書き換えルールのターゲット URI。 Data type: 文字列。
- 戻り値
- この関数は、書き換え操作の場合、既定で
trueを返します。 - この関数は、書き換え操作の場合、既定では値を返しません。
- この関数は、書き換え操作の場合、既定で
- 例
if and($arg_mode, eq($arg_mode, 'rewrite:enhance_break')) { rewrite('/a/b/c.txt? k=v', 'enhance_break') } Note: Rewrite the URI and parameters of the origin request as /a/b/c.txt? k=v if and($arg_mode, eq($arg_mode, 'rewrite:enhance_redirect')) { rewrite('/a/b/c.txt? k=v', 'enhance_redirect') } if and($arg_mode, eq($arg_mode, 'rewrite:enhance_redirect_301')) { rewrite('/a/b/c.txt? k=v', 'enhance_redirect', 301) } Note: Perform a 302 or 301 redirect to /a/b/c.txt? k=v if and($arg_mode, eq($arg_mode, 'rewrite:break')) { rewrite('/a/b/c.txt', 'break') } Note: Rewrite the URI of the origin request as /a/b/c.txt and keep the original parameters in the request unchanged. if and($arg_mode, eq($arg_mode, 'rewrite:redirect')) { rewrite('/a/b/c.txt', 'redirect') } if and($arg_mode, eq($arg_mode, 'rewrite:redirect_301')) { rewrite('/a/b/c.txt', 'redirect', 301) } Note: Perform a 302 or 301 redirect to /a/b/c.txt and keep the original parameters unchanged.
say
- 構文:
say(arg) - 説明
この関数を呼び出して、レスポンス本文を出力し、出力の終わりに新たな行を追加します。
- パラメーター
arg: レスポンス本文のコンテンツ。 Data type: 任意の型。
- 戻り値
なし
- 例
say('hello') print('byebye') print('byebye') Output: hello byebyebyebye
- 構文:
print(arg) - 説明
この関数を呼び出して、レスポンス本文を出力します。
say ()関数とは異なり、この関数は出力の終わりに新たな行を追加しません。 - パラメーター
arg: レスポンス本文のコンテンツ。 Data type: 任意の型。
- 戻り値
なし
- 例
say('hello') print('byebye') print('byebye') Output: hello byebyebyebye
exit
- 構文:
exit(code [, body]) - 説明
この関数を呼び出して、指定された
codeで現在のリクエストを終了します。bodyパラメーターも指定した場合、指定のレスポンス本文を含むレスポンスが返されます。 - パラメーター
- code: 返されるステータスコード。
- body: 返されるレスポンス本文。
- 戻り値
なし
- 例
- 例 1
if not($arg_key) { exit(403) } Note: If the request does not include the key parameter, the request is rejected and status code 403 is returned. if not($cookie_user) { exit(403, 'not cookie user') } Note: If the request does not include a cookie user, the request is rejected. A response that contains "not cookie user" is returned with status code 403. if not(0) { exit(403) } Note: The not (0) function returns false. if not(false) { exit(403) } Note: The not (false) function returns true. - 例 2
pcs = capture_re($request_uri,'^/([^/]+)/([^/]+)([^?] +)\?(.*)') sec1 = get(pcs, 1) sec2 = get(pcs, 2) sec3 = get(pcs, 3) if or(not(sec1), not(sec2), not(sec3)) { add_rsp_header('X-TENGINE-ERROR', 'auth failed - missing necessary uri set') exit(403) } digest = md5(concat(sec1, sec3)) if ne(digest, sec2) { add_rsp_header('X-TENGINE-ERROR', 'auth failed - invalid digest') exit(403) }
- 例 1