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

CDN:リクエスト処理関数

最終更新日:Jan 24, 2024

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

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-2ヘッダーが追加され、削除されます。 したがって、USER-DEFINED-REQ-2のリクエストヘッダーは、オリジンサーバーにリダイレクトされるリクエストには含まれません。

add_rsp_header

この関数の詳細を次の表に示します。
項目説明
構文add_rsp_header(name, value [, append])
説明レスポンスヘッダーを追加します。
パラメーター
  • name: 追加するレスポンスヘッダーの名前。 データ型: 文字列。
  • value: 追加するレスポンスヘッダーの値。 データ型: 文字列。
    valueパラメーターに次のいずれかの式を指定して、レスポンスフェーズで値を動的に置き換えることができます。
    • ${x}: ngx.var.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-RSP-2ヘッダーが追加され、削除されます。 したがって、USER-DEFINED-RSP-2ヘッダは応答に含まれない。

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'))
}

出力: 次の応答ヘッダーが追加されます。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'))
}

出力: 次の応答ヘッダーが追加されます。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

この関数の詳細を次の表に示します。
項目説明
構文書き換え (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 ')) {
  書き換え ('/example/examplefile.txt?k=v', 'enhance_break')
}
注: オリジンサーバーにリダイレクトされたリクエストのURIとパラメーターは、/example/examplefile.txt?k=vに書き換えられます。if and($arg_mode, eq($arg_mode, 'rewrite:enhance_redirect ')) {
  書き換え ('/example/examplefile.txt?k=v', 'enhance_redirect')
}
if and($arg_mode, eq($arg_mode, 'rewrite:enhance_redirect_301 ')) {
  書き換え ('/example/examplefile.txt?k=v' 、'enhance_redirect' 、301)
}
注: /example/examplefile.txtへの302または301リダイレクト? が実行されます。k=v

if and($arg_mode, eq($arg_mode, 'rewrite:break')) {
  書き換え ('/example/examplefile.txt', 'break')
}
注: オリジンサーバーにリダイレクトされたリクエストのURIは /example/examplefile.txtに書き換えられ、リクエストの元のパラメーターは変更されません。

if and($arg_mode, eq($arg_mode, 'rewrite:redirect')) {
  書き換え ('/example/examplefile.txt', 'redirect')
}
if and($arg_mode, eq($arg_mode, 'rewrite:redirect_301 ')) {
  書き換え ('/example/examplefile.txt', 'redirect', 301)
}
注: /example/examplefile.txtへの302または301のリダイレクトが実行され、元のパラメーターは変更されません。

言う

この関数の詳細を次の表に示します。
項目説明
構文say(arg)
説明レスポンス本文を出力し、出力の最後に改行文字を追加します。
パラメーターarg: レスポンス本文の内容。 データ型: 任意の型。
戻り値なし。
例:
は言う ('hello')
プリント ('byee')
プリント ('byee')

出力:
こんにちは
byebyebyebyebye 

print

この関数の詳細を次の表に示します。
項目説明
構文プリント (arg)
説明レスポンス本文を印刷します。 この関数は、say() 関数とは異なります。 この関数は、出力の最後に改行を追加しません。
パラメーターarg: レスポンス本文の内容。 データ型: 任意の型。
戻り値なし。
例:
は言う ('hello')
プリント ('byee')
プリント ('byee')

出力:
こんにちは
byebyebyebyebye 

出口

この関数の詳細を次の表に示します。
項目説明
構文exit(code [, body])
説明指定されたコードで現在のリクエストを終了します。 bodyパラメーターも設定すると、指定されたレスポンス本文を含むレスポンスが返されます。
パラメーター
  • code: 返されるHTTPステータスコード。
  • body: レスポンスボディ。
戻り値なし。
例:
  • ない場合の例1
    ($arg_key) {
        exit(403)
    }
    注: リクエストにキーパラメーターが含まれていない場合、リクエストは拒否され、HTTP 403ステータスコードが返されます。 
    
    そうでない場合 ($cookie_user) {
        exit(403、「cookieユーザーではない」)
    }
    注: リクエストにcookie_userが含まれていない場合、リクエストは拒否され、「not cookie user」という本文を含むレスポンスがHTTP 403ステータスコードとともに返されます。
    
    if not (0) {
        exit(403)
    }
    注: not(0) 関数はfalseの値を返します。
    
    if not(false) {
        exit(403)
    }
    注: not(false) 関数はtrueの値を返します。
  • 例2
    ($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 required uri set')
       exit(403)
    }
    digest = md5(concat(sec1, sec3))
    if ne (ダイジェスト, sec2) {
        add_rsp_header('X-TENGINE-ERROR '、'auth failed - invalid digest')
        exit(403)
    } 

get_rsp_header

この関数の詳細を次の表に示します。
項目説明
構文get_rsp_header(str)
説明レスポンスヘッダーを取得します。
パラメーターstr: 取得するレスポンスヘッダー。 データ型: 文字列。
戻り値文字列、数値、ディクショナリ、またはBooleanデータ型の指定されたレスポンスヘッダーを返します。
  • 指定されたレスポンスヘッダーが存在する場合、レスポンスヘッダーが返されます。 レスポンスヘッダーのデータ型は、ディクショナリまたは文字列です。
  • 指定されたレスポンスヘッダーが存在しない場合は、falseの値が返されます。
例:
ct = get_rsp_header('content-type')
if ct {
    add_rsp_header('origin-content-type' 、'is')
} else {
      add_rsp_header('origin-content-type' 、'no')
} 

add_rsp_cookie

この関数の詳細を次の表に示します。
項目説明
構文add_rsp_cookie(k, v [,properties])
説明レスポンスcookieを設定します。 関数が呼び出されるたびに、新しいSet-Cookie応答ヘッダーが生成されます。
パラメーター
  • k: クッキーの名前。
  • v: クッキーの値。
  • properties: cookieのプロパティ。 このパラメーターはオプションです。 詳細については、「Set-Cookie」をご参照ください。
戻り値指定されたcookieが設定されている場合はtrueの値が返され、指定されたcookieの設定に失敗した場合はfalseの値が返されます。
例:
add_rsp_cookie('user', 'edgescript')

add_rsp_cookie('login_time '、tostring(now())) 、[
    'path' = '/'
])

expires = cookie_time(time())
add_rsp_cookie('psid' 、'SDF93745HFSDF2934JKHG' 、[
    'path' = '/play' 、
    'domain' = 'foo.com '、
    'secure' = true、
    'httponly' = true、
    'expires' = expires,
    'max_age' = 100、
    'samesite' = 'Strict' 、
    'extension' = 'xxt3s'
]) 
レスポンス:
Set-Cookie: user=edgescript
Set-Cookie: login_time=1582538968.912; パス=/
Set-Cookie: psid=SDF93745HFSDF2934JKHG; 有効期限=2月24日月曜日10:09:28 GMT; Max-Age=100; Domai n=foo.com; パス=/プレイ; セキュア; HttpOnly; SameSite=Strict; xxt3s