ここでは、リクエスト処理関数の構文、説明、パラメーター、戻り値、例について記述します。

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 の値と置き換えます。
    • 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 と同様です。 ただし、パラメーターもこのモードで書き換えられます。
    • code: レスポンスコード。 Data type: 数値型。

      このパラメーターは、flag パラメーターを redirect または enhance_redirect に設定した場合にのみ、カスタマイズすることができます。

  • 戻り値
    • この関数は、書き換え操作の場合、既定で 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

この関数は、次のように記述されます。
  • 構文: 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)
      }