すべてのプロダクト
Search
ドキュメントセンター

Server Load Balancer:リクエスト処理関数

最終更新日:Dec 20, 2024

このトピックでは、リクエスト処理関数の構文、機能、パラメーター、および戻り値について説明します。 このトピックでは、これらの関数の例も示します。

add_req_header|del_req_header|add_rsp_header|del_rsp_header|encode_args|decode_args|書き直し|言う|プリント|終了

add_req_header

項目

説明

構文

add_req_header(name, value [, append])

機能

オリジンサーバーにリダイレクトされる前に、リクエストにリクエストヘッダーを追加します。

パラメーター

  • name: 追加するリクエストヘッダーの名前。 データ型: 文字列。

  • value: 追加するリクエストヘッダーの値。 データ型: 文字列。

  • append: 同じ名前のリクエストヘッダーがすでに存在する場合、指定されたを追加するかどうかを指定します。 有効な値は、true および false です。 デフォルト値:false データ型:Boolean このパラメーターを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')

リクエストヘッダー:

USER-DEFINED-REQ-1: 1
USER-DEFINED-REQ-1: x
説明

USER-DEFINED-REQ 2のヘッダーが追加され、削除されます。 したがって、USER-DEFINED-REQ 2のヘッダーはリクエストに含まれません。

del_req_header

項目

説明

構文

del_req_header (名前)

機能

オリジンサーバーにリダイレクトされる前に、リクエストからリクエストヘッダーを削除します。

パラメーター

name: 削除するリクエストヘッダーの名前。 データ型: 文字列。

戻り値

デフォルトでは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')

ヘッダー:

USER-DEFINED-REQ-1: 1
USER-DEFINED-REQ-1: x
説明

USER-DEFINED-REQ-1: 1USER-DEFINED-REQ-1: xUSER-DEFINED-REQ-2: 2のヘッダーが追加され、USER-DEFINED-REQ-2のヘッダーが削除されます。 したがって、USER-DEFINED-REQ 2のヘッダーはリクエストに含まれません。

add_rsp_header

項目

説明

構文

add_rsp_header(name, value [, append])

機能

レスポンスヘッダーを追加します。

パラメーター

  • name: 追加するレスポンスヘッダーの名前。 データ型: 文字列。

  • value: 追加するレスポンスヘッダーの値。 データ型: 文字列。

    valueパラメーターに次のいずれかの式を指定して、レスポンスフェーズで値を動的に置き換えることができます。

    • ${x}: 変数xの値に置き換えられます。

    • @{y}: レスポンスヘッダーyの値に置き換えられます。

  • append: 同じ名前のレスポンスヘッダーがすでに存在する場合、指定されたを追加するかどうかを指定します。 有効な値は、true および false です。 デフォルト値:false データ型:Boolean このパラメーターを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')

応答ヘッダー:

USER-DEFINED-RSP-1: 1
USER-DEFINED-RSP-1: x
説明

USER-DEFINED-RSP 2のヘッダーが追加され、削除されます。 したがって、USER-DEFINED-RSP 2のヘッダは応答に含まれない。

del_rsp_header

項目

説明

構文

del_rsp_header (名前)

機能

レスポンスヘッダーを削除します。

パラメーター

name: 削除するレスポンスヘッダーの名前。 データ型: 文字列。

戻り値

デフォルトでは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')

応答ヘッダー:

USER-DEFINED-RSP-1: 1
USER-DEFINED-RSP-1: x
説明

USER-DEFINED-REQ-1: 1USER-DEFINED-REQ-1: xUSER-DEFINED-REQ-2: 2のヘッダーが追加され、USER-DEFINED-REQ-2のヘッダーが削除されます。 したがって、USER-DEFINED-REQ 2のヘッダは応答に含まれない。

encode_args

項目

説明

構文

encode_args(d)

機能

dで指定されたディクショナリのキーと値のペアを、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-AScript-ENCODE-ARGS', my_args_str)

to_args = decode_args(my_args_str)
if get(to_args, 'algo') {
    add_rsp_header('X-AScript-DECODE-ARGS-ALGO', get(to_args, 'algo'))
}
if get(to_args, 'signature') {
    add_rsp_header('X-AScript-DECODE-ARGS-SIGN', get(to_args, 'signature'))
}

応答ヘッダー:

X-AScript-ENCODE-ARGS: signature=da9dc4b7-87ae-4330-aaaf-e5454e2c2af1&algo=private%20sign1
X-AScript-DECODE-ARGS-ALGO: private sign1
X-AScript-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-AScript-ENCODE-ARGS', my_args_str)

to_args = decode_args(my_args_str)
if get(to_args, 'algo') {
    add_rsp_header('X-AScript-DECODE-ARGS-ALGO', get(to_args, 'algo'))
}
if get(to_args, 'signature') {
    add_rsp_header('X-AScript-DECODE-ARGS-SIGN', get(to_args, 'signature'))
}

応答ヘッダー:

X-AScript-ENCODE-ARGS: signature=da9dc4b7-87ae-4330-aaaf-e5454e2c2af1&algo=private%20sign1
X-AScript-DECODE-ARGS-ALGO: private sign1
X-AScript-DECODE-ARGS-SIGN: da9dc4b7-87ae-4330-aaaf-e5454e2c2af1

rewrite

項目

説明

構文

書き換え (url, flag, code)

機能

書き換えまたはリダイレクトを実行します。

パラメーター

  • url: 書き換え操作後にソースURIが書き換えられるURL。 データ型: 文字列。

    • flagパラメーターをredirectまたはbreakに設定すると、URIのみが書き換えられます。 このパラメーターは、書き換え操作後の最終的なURIを指定します。

    • flagパラメーターをenhance_redirectまたはenhance_breakに設定すると、URIとパラメーターの両方が書き換えられます。 このパラメーターは、書き換え操作後の最終的なURIとパラメーターを指定します。

  • flag: 書き換えモード。 データ型: 文字列。

    • redirect: URIのみを書き換えます。 パラメータは書き換えられません。 デフォルトでは、302リダイレクトが実行されます。 このモードを指定した場合、codeパラメーターは設定可能です。 codeパラメーターの有効な値は、301、302 (デフォルト) 、303、307、および308です。

    • break: URIのみをURLに書き換えます。 パラメータは書き換えられません。

    • enhance_redirect: redirectに似ています。 ただし、URIとパラメータの両方が書き換えられます。

    • enhance_break: breakに似ています。 ただし、URIとパラメータの両方が書き換えられます。

  • code: HTTPステータスコード。 データ型: numeric。

    このパラメーターは、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: The URI and parameters of requests redirected to the origin server are rewritten to /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: A 302 or 301 redirect to /a/b/c.txt?k=v is performed.

if and($arg_mode, eq($arg_mode, 'rewrite:break')) {
  rewrite('/a/b/c.txt', 'break')
}
#Note: The URI of requests redirected to the origin server is rewritten to /a/b/c.txt and the original parameters in the requests remain 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: A 302 or 301 redirect to /a/b/c.txt is performed and the original parameters remain unchanged.

言う

項目

説明

構文

say(arg)

機能

レスポンス本文を出力し、出力の最後に改行文字を追加します。

パラメーター

arg: レスポンス本文の内容。 データ型: 任意の型。

戻り値

非該当

例:

say('hello')
print('byebye')
print('byebye')

出力:

hello
byebyebyebye

print

項目

説明

構文

プリント (arg)

機能

レスポンス本文を印刷します。 この関数は、say() 関数とは異なります。 この関数は、出力の最後に改行を追加しません。

パラメーター

arg: レスポンス本文の内容。 データ型: 任意の型。

戻り値

非該当

例:

say('hello')
print('byebye')
print('byebye')

出力:

hello
byebyebyebye

出口

項目

説明

構文

exit(code [, body])

機能

指定されたHTTPステータスコードで現在のリクエストを終了します。 bodyパラメーターも設定すると、指定されたレスポンス本文を含むレスポンスが返されます。

パラメーター

  • code: 返されるHTTPステータスコード。

  • body: レスポンスボディ。

戻り値

非該当

例:

  • 例 1:

    if not($arg_key) {
        exit(403)
    }
    #Note: If a request does not include the key parameter, the request is denied and the HTTP 403 status code is returned. 
    
    if not($cookie_user) {
        exit(403, 'not cookie user')
    }
    #Note: If a request does not include cookie_user, the request is denied and a response that contains the body "not cookie user" is returned with the HTTP 403 status code.
    
    if not(0) {
        exit(403)
    }
    #Note: The not(0) function returns a value of false.
    
    if not(false) {
        exit(403)
    }
    #Note: The not(false) function returns a value of 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)
    }