日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

kong组件_Kong插件开发工具包

發布時間:2025/3/20 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kong组件_Kong插件开发工具包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Kong插件開發工具包

插件開發工具包(或稱 PDK),是一組 Lua 方法和變量,插件可以使用這些方法和變量實現自己的邏輯,PDK 最初在 Kong 0.14.0 中發布,PDK 保證從1.0.0版本開始向前兼容,截至本版本,PDK 尚未達到1.0.0,然而插件作者可以放心依賴它與請求、響應或核心組件進行安全可靠的交互

用戶可以通過全局變量訪問插件開發工具包,例如 kong.request、kong.log

kong.version

當前 Kong 節點的版本號,字符串格式

用法:

print(kong.version) -- "0.14.0"

kong.version_num

當前 Kong 節點的版本號,用來做版本比較,整數格式

用法:

if kong.version_num < 13000 then -- 000.130.00 -> 0.13.0

-- no support for Routes & Services

end

kong.pdk_major_version

當前 PDK 的大版本號,整數格式

用法:

if kong.pdk_version_num < 2 then

-- PDK is below version 2

end

kong.pdk_version

當前 PDK 的版本號,字符串格式

用法:

print(kong.pdk_version) -- "1.0.0"

kong.configuration

當前 Kong 節點的配置信息,基于配置文件和環境變量,文件中以逗號分隔的列表此處顯示為字符串數組

用法:

print(kong.configuration.prefix) -- "/usr/local/kong"

-- this table is read-only; the following throws an error:

kong.configuration.prefix = "foo"

kong.db

Kong 的 DAO 實例(kong.db 模塊),包含對多個實體的訪問對象

用法:

kong.db.services:insert()

kong.db.routes:select()

kong.dns

Kong 的 DNS 解析器實例

kong.worker_events

Kong 的 IPC 模塊實例,用于內部 worker 進程通信

kong.cluster_events

Kong 的集群事件模塊實例,用于節點間通信

kong.cache

Kong 緩存對象實例

kong.client

Client 模塊是一組方法,通過請求上下文,用于檢索連接到Kong的客戶端的信息

kong.client.get_ip()

返回發起請求的遠程 IP 地址,它將始終返回直連到 Kong 的客戶端的地址,所以,當 Kong 之前有負載均衡器的情況下,這個方法會返回負載均衡器的地址,而不是下游客戶端的地址

段:

certificate, rewrite, access, header_filter, body_filter, log

返回值:

發起請求的遠程 IP 地址,字符串格式

用法:

-- Given a client with IP 127.0.0.1 making connection through

-- a load balancer with IP 10.0.0.1 to Kong answering the request for

-- https://example.com:1234/v1/movies

kong.client.get_ip() -- "10.0.0.1"

kong.client.get_forwarded_ip()

返回發起請求的遠程 IP 地址,與 kong.client.get_ip 不同,這個方法會考慮到位于 Kong 之前的負載均衡器以及轉發地址,這個方法是否返回轉發地址取決于幾個 Kong 配置參數:trusted_ips、real_ip_header、real_ip_recursive

段:

certificate, rewrite, access, header_filter, body_filter, log

返回值:

發起請求的遠程 IP 地址,考慮轉發地址,字符串格式

用法:

-- Given a client with IP 127.0.0.1 making connection through

-- a load balancer with IP 10.0.0.1 to Kong answering the request for

-- https://username:password@example.com:1234/v1/movies

kong.request.get_forwarded_ip() -- "127.0.0.1"

-- Note: assuming that 10.0.0.1 is one of the trusted IPs, and that

-- the load balancer adds the right headers matching with the configuration

-- of `real_ip_header`, e.g. `proxy_protocol`.

kong.client.get_port()

返回發起請求的端口,它將始終返回直連到 Kong 的客戶端的端口,所以,當 Kong 之前有負載均衡器的情況下,這個方法會返回負載均衡器的端口,而不是下游客戶端的端口

段:

certificate, rewrite, access, header_filter, body_filter, log

返回值:

客戶端端口號,整數格式

用法:

-- [client]:40000 80:[balancer]:30000 80:[kong]:20000 80:[service]

kong.client.get_port() -- 30000

kong.client.get_forwarded_port()

返回發起請求的端口,與 kong.client.get_port 不同,這個方法會考慮到位于 Kong 之前的負載均衡器以及轉發端口,這個方法是否返回轉發端口取決于幾個 Kong 配置參數:trusted_ips、real_ip_header、real_ip_recursive

段:

certificate, rewrite, access, header_filter, body_filter, log

返回值:

客戶端端口號,考慮轉發端口號,整數格式

用法:

-- [client]:40000 80:[balancer]:30000 80:[kong]:20000 80:[service]

kong.client.get_forwarded_port() -- 40000

-- Note: assuming that [balancer] is one of the trusted IPs, and that

-- the load balancer adds the right headers matching with the configuration

-- of `real_ip_header`, e.g. `proxy_protocol`.

kong.client.get_credential()

返回當前經過身份驗證的消費者的憑證,如果未設置,返回 nil

段:

access, header_filter, body_filter, log

返回值:

經過身份驗證的憑證

用法:

local credential = kong.client.get_credential()

if credential then

consumer_id = credential.consumer_id

else

-- request not authenticated yet

end

kong.client.get_consumer()

返回當前經過身份驗證的消費者實體,如果未設置,返回 nil

段:

access, header_filter, body_filter, log

返回值:

經過身份驗證的消費者

用法:

local consumer = kong.client.get_consumer()

if consumer then

consumer_id = consumer.id

else

-- request not authenticated yet, or a credential

-- without a consumer (external auth)

end

kong.client.authenticate(consumer, credential)

為當前請求設置經過身份驗證的消費者或憑證,消費者和憑證必須存在一個,否則方法將報錯

段:

access

參數:

consumer(table|nil):設置消費者,如果不設置值,之前存在的值會被清空

credential(table|nil):設置憑證,如果不設置值,之前存在的值會被清空

用法:

-- assuming `credential` and `consumer` have been set by some authentication code

kong.client.authenticate(consumer, credentials)

kong.client.get_protocol(allow_terminated)

返回當前路由匹配的協議,如果沒有路由匹配,返回 nil

段:

access, header_filter, body_filter, log

參數:

allow_terminated:布爾值,如果設置,則在檢查 https 時檢查 X-Forwarded-Proto 頭

返回值:

string | nil:"http"、"https"、"tcp"、"tls" 或 nil

nil | err:成功返回 nil,失敗返回錯誤信息

用法:

kong.client.get_protocol() -- "http"

kong.ctx

當前請求上下文

kong.ctx.shared

一個 table 結構的數據,它用于在給定請求的多個插件之間共享數據,由于它只與請求的上下文相關,所有無法從 Lua 模塊的頂級塊訪問此表,只能在請求段中訪問,對應插件的 rewrite、access、header_filter、body_filter、log 接口

所有插件都可以看到單個插件在此 table 中插入的值,與其加護時必須謹慎,因為命名沖突會導致數據被覆蓋

段:

rewrite, access, header_filter, body_filter, log

用法:

-- Two plugins A and B, and if plugin A has a higher priority than B's

-- (it executes before B):

-- plugin A handler.lua

function plugin_a_handler:access(conf)

kong.ctx.shared.foo = "hello world"

kong.ctx.shared.tab = {

bar = "baz"

}

end

-- plugin B handler.lua

function plugin_b_handler:access(conf)

kong.log(kong.ctx.shared.foo) -- "hello world"

kong.log(kong.ctx.shared.tab.bar) -- "baz"

end

kong.ctx.plugin

一個 table 結構的數據,與 kong.ctx.shared 不同,此 table 不在插件之間共享,相反,它僅對當前插件實例可見,也就是說,如果配置了多個限流插件實例(在不同的服務上),每個實例對于每個請求都有自己的 table

由于它自帶命名空間,所以它比 kong.ctx.shared 更安全,因為它避免了潛在的命名沖突,這可能導致多個插件在不知不覺中覆蓋了彼此的數據

段:

rewrite, access, header_filter, body_filter, log

用法:

-- plugin handler.lua

function plugin_handler:access(conf)

kong.ctx.plugin.val_1 = "hello"

kong.ctx.plugin.val_2 = "world"

end

function plugin_handler:log(conf)

local value = kong.ctx.plugin.val_1 .. " " .. kong.ctx.plugin.val_2

kong.log(value) -- "hello world"

end

kong.ip

此模塊根據 trusted_ips 配置確定給定的 IP 是否可信

kong.ip.is_trusted(address)

根據 trusted_ips 配置屬性,此方法將返回給定的 IP 是否可信,并且是否同時支持 ipv4 和 ipv6

段:

init_worker, certificate, rewrite, access, header_filter, body_filter, log

參數:

address(string):IP 地址

返回值:

true 代表受信,false代表不受信,布爾格式

用法:

if kong.ip.is_trusted("1.1.1.1") then

kong.log("The IP is trusted")

end

kong.log

一個 table 結構的數據,此命名空間包含了日志工具的實例,含有下述所有方法,每個插件的實例有單獨的命名空間,Kong 確保在執行插件之前,會將實例與專用于插件的日志工具交換,這允許日志以插件的名稱作為前綴,以便進行調試

kong.log(…)

日志使用當前 Nginx 配置中的 error_log 指令,日志級別是 notice,Nginx 的 error_log 指令通過 log_level、proxy_error_log 和 admin_error_log 這三個配置設置

傳入此方法的參數的拼接方式與 ngx.log() 類似,日志中將顯示調用它的 Lua 文件和行號,與 ngx.log() 不同,此方法將使用 [kong],而不是 [lua],作為錯誤消息的前綴,參數可以是任何格式的,在打印日志時會調用 tostring 方法轉換成字符串格式

核心生成的日志格式:

[kong] %file_src:%line_src %message

相比較,插件生成的日志格式:

[kong] %file_src:%line_src [%namespace] %message

%file_src:調用日志的文件名

%func_name:調用日志的方法的名稱

%line_src:調用日志的行號

%message:日志消息

示例,調用下列方法:

kong.log("hello ", "world")

核心打印日志:

2017/07/09 19:36:25 [notice] 25932#0: *1 [kong] some_file.lua:54 hello world, client: 127.0.0.1, server: localhost, request: "GET /log HTTP/1.1", host: "localhost"

插件打印日志:

2017/07/09 19:36:25 [notice] 25932#0: *1 [kong] some_file.lua:54 [key-auth] hello world, client: 127.0.0.1, server: localhost, request: "GET /log HTTP/1.1", host: "localhost"

段:

init_worker, certificate, rewrite, access, header_filter, body_filter, log

參數:

在發送到日志之前,所有的參數會拼接到一起連成字符串

返回值:

沒有返回,無效的輸入拋錯

用法:

kong.log("hello ", "world") -- alias to kong.log.notice()

kong.log.LEVEL(…)

與 kong.log() 類似,但生成的日志具有 \ 日志級別,而不是 notice,支持的日志級別包括:

kong.log.alert()

kong.log.crit()

kong.log.err()

kong.log.warn()

kong.log.notice()

kong.log.info()

kong.log.debug()

記錄日志的語法與 kong.log() 類似,例如:

kong.log.err("hello ", "world")

在核心內會生成一條日志,如下:

2017/07/09 19:36:25 [error] 25932#0: *1 [kong] some_file.lua:54 hello world, client: 127.0.0.1, server: localhost, request: "GET /log HTTP/1.1", host: "localhost"

如果從插件中調用(例如 key-auth),它將包含命名空間前綴,如下:

2017/07/09 19:36:25 [error] 25932#0: *1 [kong] some_file.lua:54 [key-auth] hello world, client: 127.0.0.1, server: localhost, request: "GET /log HTTP/1.1", host: "localhost"

段:

init_worker, certificate, rewrite, access, header_filter, body_filter, log

參數:

在發送到日志之前,所有的參數會拼接到一起連成字符串

返回值:

沒有返回,無效的輸入拋錯

用法:

kong.log.warn("something require attention")

kong.log.err("something failed: ", err)

kong.log.alert("something requires immediate action")

kong.log.inspect(…)

與 kong.log() 類似,此方法會生成 notice 級別的日志,并且可以接受任意數量的參數,如果通過 kong.log.inspect.off() 方法禁用了功能,那么此方法不會打印任何內容

kong.log.inspect("...")

與 kong.log() 不同的是,該方法會在拼接參數時加上空格,這個方法主要用于調試,應避免在生產代碼中使用,因為它執行了很多格式化操作,消耗資源

kong.log.inspect(…) 的日志格式如下:

%file_src:%func_name:%line_src %message

%file_src:調用日志的文件名

%func_name:調用日志的方法的名稱

%line_src:調用日志的行號

%message:日志消息

段:

init_worker, certificate, rewrite, access, header_filter, body_filter, log

參數:

在發送到日志之前,所有的參數會拼接到一起連成字符串

用法:

kong.log.inspect("some value", a_variable)

kong.log.inspect.on()

啟用 inspect 日志功能

段:

init_worker, certificate, rewrite, access, header_filter, body_filter, log

用法:

kong.log.inspect.on()

kong.log.inspect.off()

禁用 notice 日志功能

段:

init_worker, certificate, rewrite, access, header_filter, body_filter, log

用法:

kong.log.inspect.off()

kong.nginx

Nginx 信息模塊,一組用于檢索 Nginx 實現細節和元信息的方法

kong.nginx.get_subsystem()

段:

any

返回值:

http 或 stream,字符串格式

用法:

kong.nginx.get_subsystem() -- "http"

kong.node

節點級別信息

kong.node.get_id()

返回此節點用于描述自身的 ID

返回值:

節點 ID,字符串格式

用法:

local id = kong.node.get_id()

kong.node.get_memory_stats([unit[, scale]])

返回該節點的內存使用數據

參數:

unit(string, optional):內存計量單位,可以是 b/B、k/K、m/M 或 g/G

scale(number, optional):精度,默認小數點后兩位

返回值:

包含此節點的內存使用統計數據,如果單位是 b/B(默認值),則值為數字,否則統計數據為字符串,后綴是單位,table 格式

用法:

local res = kong.node.get_memory_stats()

-- res will have the following structure:

{

lua_shared_dicts = {

kong = {

allocated_slabs = 12288,

capacity = 24576

},

kong_db_cache = {

allocated_slabs = 12288,

capacity = 12288

}

},

workers_lua_vms = {

{

http_allocated_gc = 1102,

pid = 18004

},

{

http_allocated_gc = 1102,

pid = 18005

}

}

}

local res = kong.node.get_memory_stats("k", 1)

-- res will have the following structure:

{

lua_shared_dicts = {

kong = {

allocated_slabs = "12.0 KiB",

capacity = "24.0 KiB",

},

kong_db_cache = {

allocated_slabs = "12.0 KiB",

capacity = "12.0 KiB",

}

},

workers_lua_vms = {

{

http_allocated_gc = "1.1 KiB",

pid = 18004

},

{

http_allocated_gc = "1.1 KiB",

pid = 18005

}

}

}

kong.request

一組方法,用于獲取客戶端發出的請求信息

kong.request.get_scheme()

返回請求 URL 的 schema 組件,返回值為小寫格式

段:

rewrite, access, header_filter, body_filter, log, admin_api

返回值:

http 或者 https,字符串格式

用法:

-- Given a request to https://example.com:1234/v1/movies

kong.request.get_scheme() -- "https"

kong.request.get_host()

返回請求 URL 的 host 組件,或者 Host 頭的值,返回值為小寫格式

段:

rewrite, access, header_filter, body_filter, log, admin_api

返回值:

主機地址,字符串格式

用法:

-- Given a request to https://example.com:1234/v1/movies

kong.request.get_host() -- "example.com"

kong.request.get_port()

返回請求 URL 的 port 組件

段:

certificate, rewrite, access, header_filter, body_filter, log, admin_api

返回值:

端口號,整數格式

用法:

-- Given a request to https://example.com:1234/v1/movies

kong.request.get_port() -- 1234

kong.request.get_forwarded_scheme()

返回請求 URL 的 schema 組件,如果請求來自可信源,也會考慮 X-Forwarded-Proto 請求頭,返回值為小寫格式,該方法是否考慮 X-Forwarded-Proto 請求頭取決于幾個 Kong 配置參數:trusted_ips、real_ip_header、real_ip_recursive

段:

rewrite, access, header_filter, body_filter, log, admin_api

返回值:

轉發的 schema,字符串格式

用法:

kong.request.get_forwarded_scheme() -- "https"

kong.request.get_forwarded_host()

返回請求 URL 的 host 組件,不同于 kong.request.get_host(),如果請求來自可信源,也會考慮 X-Forwarded-Host 請求頭,該方法是否考慮 X-Forwarded-Host 請求頭取決于幾個 Kong 配置參數:trusted_ips、real_ip_header、real_ip_recursive

段:

rewrite, access, header_filter, body_filter, log, admin_api

返回值:

轉發的主機地址,字符串格式

用法:

kong.request.get_forwarded_host() -- "example.com"

kong.request.get_forwareded_port()

返回請求 URL 的 port 組件,如果請求來自可信源,也會考慮 X-Forwarded-Host 請求頭,該方法是否考慮 X-Forwarded-Proto 請求頭取決于幾個 Kong 配置參數:trusted_ips、real_ip_header、real_ip_recursive

段:

rewrite, access, header_filter, body_filter, log, admin_api

返回值:

轉發的端口,整數格式

用法:

kong.request.get_forwarded_port() -- 1234

kong.request.get_http_version()

返回 Http 協議使用的版本號,返回值為 1.1 或 2.0

段:

rewrite, access, header_filter, body_filter, log, admin_api

返回值:

字符串類型,或者是 nil

用法:

kong.request.get_http_version() -- "1.1"

kong.request.get_method()

返回請求的 Http 方法,返回值為大寫格式

段:

rewrite, access, header_filter, body_filter, log, admin_api

返回值:

請求方法,字符串格式

用法:

kong.request.get_method() -- "GET"

kong.request.get_path()

返回請求 URL 的 path 組件,不包含請求參數

段:

rewrite, access, header_filter, body_filter, log, admin_api

返回值:

請求路徑,字符串格式

用法:

-- Given a request to https://example.com:1234/v1/movies?movie=foo

kong.request.get_path() -- "/v1/movies"

kong.request.get_path_with_query()

返回請求 URL 的 path 組件,包含請求參數

段:

rewrite, access, header_filter, body_filter, log, admin_api

返回值:

請求路徑,包含請求參數,字符串格式

用法:

-- Given a request to https://example.com:1234/v1/movies?movie=foo

kong.request.get_path_with_query() -- "/v1/movies?movie=foo"

kong.request.get_raw_query()

返回請求 URL 的 query 組件,不包含 ? 字符

段:

rewrite, access, header_filter, body_filter, log, admin_api

返回值:

請求參數

用法:

-- Given a request to https://example.com/foo?msg=hello%20world&bla=&bar

kong.request.get_raw_query() -- "msg=hello%20world&bla=&bar"

kong.request.get_query_arg()

返回從當前請求的查詢參數獲取的指定參數的值,如果參數有值,返回的是字符串或者布爾類型,如果找不到參數,返回 nil,如果查詢參數中多次出現具有相同名稱的參數,該方法返回第一次出現的值

段:

rewrite, access, header_filter, body_filter, log, admin_api

返回值:

請求參數,字符串類型、布爾類型、nil

用法:

-- Given a request GET /test?foo=hello%20world&bar=baz&zzz&blo=&bar=bla&bar

kong.request.get_query_arg("foo") -- "hello world"

kong.request.get_query_arg("bar") -- "baz"

kong.request.get_query_arg("zzz") -- true

kong.request.get_query_arg("blo") -- ""

kong.request.get_query([max_args])

返回從請求參數提取的參數表,鍵是參數名稱,值是參數值,鍵和值都未經轉義,默認情況下,這個方法返回100個參數,可以指定 max_args 調整這個值,參數范圍是1至1000

段:

rewrite, access, header_filter, body_filter, log, admin_api

參數:

max_args(number, optional):參數表的最大個數

返回值:

請求參數,table 格式

用法:

-- Given a request GET /test?foo=hello%20world&bar=baz&zzz&blo=&bar=bla&bar

for k, v in pairs(kong.request.get_query()) do

kong.log.inspect(k, v)

end

-- Will print

-- "foo" "hello world"

-- "bar" {"baz", "bla", true}

-- "zzz" true

-- "blo" ""

kong.request.get_header(name)

返回請求頭的值,請求頭名不區分大小寫,并全部采用小寫形式,- 可以寫成 _,比如 X-Custom-Header 可以寫成 x_custom_header

段:

rewrite, access, header_filter, body_filter, log, admin_api

參數:

name(string):請求頭的名稱

返回值:

請求頭的值,字符串類型或者 nil

用法:

-- Given a request with the following headers:

-- Host: foo.com

-- X-Custom-Header: bla

-- X-Another: foo bar

-- X-Another: baz

kong.request.get_header("Host") -- "foo.com"

kong.request.get_header("x-custom-header") -- "bla"

kong.request.get_header("X-Another") -- "foo bar"

kong.request.get_headers([max_headers])

返回請求頭表,鍵是請求頭名,值是請求頭值,默認情況下,這個方法返回100個請求頭,可以指定 max_headers 調整這個值,參數范圍是1至1000

段:

rewrite, access, header_filter, body_filter, log, admin_api

參數:

max_headers(number, optional):請求頭表的最大個數

返回值:

請求頭,table 格式

用法:

-- Given a request with the following headers:

-- Host: foo.com

-- X-Custom-Header: bla

-- X-Another: foo bar

-- X-Another: baz

local headers = kong.request.get_headers()

headers.host -- "foo.com"

headers.x_custom_header -- "bla"

headers.x_another[1] -- "foo bar"

headers["X-Another"][2] -- "baz"

kong.request.get_raw_body()

返回請求體,如果請求體沒有內容,該方法返回一個空字符串,如果請求體大小大于 Nginx 緩沖區大小(通過 client_body_buffer_size 設置),該方法會失敗并返回錯誤信息

段:

rewrite, access, admin_api

返回值:

請求體,字符串格式

用法:

-- Given a body with payload "Hello, Earth!":

kong.request.get_raw_body():gsub("Earth", "Mars") -- "Hello, Mars!"

kong.request.get_body([mimetype[, max_args]])

以鍵值對形式返回請求體數據,請求體以最合適的格式解析:

如果指定了 mimetype,根據 content type 對請求體進行解碼

如果 content type 是 application/x-www-form-urlencoded,以 form-encoded 形式返回請求體

如果 content type 是 multipart/form-data,以上述方式解析,multipart(kong.request.get_raw_body(), kong.request.get_header("Content-Type")):get_all()

如果 content type 是 application/json,以 JSON 形式解析請求體,JSON 格式對應 Lua 的基本類型

如果不是上述情況,返回 nil 表示請求未被解析

mimetype 可以取以下值:application/x-www-form-urlencoded、application/json、multipart/form-data

max_args 限定 application/x-www-form-urlencoded 解析參數的個數

段:

rewrite, access, admin_api

參數:

mimetype(string, optional):mimetype

max_args(number, optional):請求體表的最大個數

返回值:

請求體,table 格式或 nil

錯誤信息,table 格式或 nil

mimetype 類型,table 格式或 nil

用法:

local body, err, mimetype = kong.request.get_body()

body.name -- "John Doe"

body.age -- "42"

kong.response

響應模塊,其中包含了一組方法,用于生成和操作發送發送給客戶端的響應,響應可以由 Kong 生成,或者從服務的響應體中代理過來

kong.response.get_status()

返回當前為下游響應設置的的 Http 狀態碼,如果請求被代理,則返回值將是來自 Service 的響應值(與 kong.service.response.get_status() 相同),如果請求未被代理,并且響應是由 Kong 本身產生的(比如通過 kong.response.exit()),則返回值將按原樣返回

段:

header_filter, body_filter, log, admin_api

返回值:

為下游響應設置的 Http 狀態碼

用法:

kong.response.get_status() -- 200

kong.response.get_header(name)

返回指定響應頭的值,該函數包含來自代理服務的響應頭和 Kong 添加的響應頭(例如,通過 kong.response.add_header())

段:

header_filter, body_filter, log, admin_api

參數:

name(string):請求頭的名稱,請求頭名不區分大小寫,并全部采用小寫形式,- 可以寫成 _,比如 X-Custom-Header 可以寫成 x_custom_header

返回值:

響應頭的值,字符串格式或 nil

用法:

-- Given a response with the following headers:

-- X-Custom-Header: bla

-- X-Another: foo bar

-- X-Another: baz

kong.response.get_header("x-custom-header") -- "bla"

kong.response.get_header("X-Another") -- "foo bar"

kong.response.get_header("X-None") -- nil

kong.response.get_headers([max_headers])

包含響應頭的 Lua table,與 kong.service.response.get_headers() 不同,該方法會返回客戶端接收到的所有響應頭,包括 Kong 本身添加的響應有,默認情況下,該方法最多返回100個響應頭,可以指定 max_headers 調整這個值,參數范圍是1至1000

段:

header_filter, body_filter, log, admin_api

參數:

max_headers(number, optional):

返回值:

響應中的響應頭 table,table 格式

如果響應頭數目超過 max_headers,返回 truncated,字符串格式

用法:

-- Given an response from the Service with the following headers:

-- X-Custom-Header: bla

-- X-Another: foo bar

-- X-Another: baz

local headers = kong.response.get_headers()

headers.x_custom_header -- "bla"

headers.x_another[1] -- "foo bar"

headers["X-Another"][2] -- "baz"

kong.response.get_source()

這個方法確定當前響應的來源,返回值可能包含三類字符串:

exit:調用了 kong.response.exit(),即請求被插件或 Kong 本身短路的時候

error:發生錯誤,比如連接到上游服務超時,返回 error

service:連接到代理服務,返回 service

段:

header_filter, body_filter, log, admin_api

返回值:

響應源,字符串格式

用法:

if kong.response.get_source() == "service" then

kong.log("The response comes from the Service")

elseif kong.response.get_source() == "error" then

kong.log("There was an error while processing the request")

elseif kong.response.get_source() == "exit" then

kong.log("There was an early exit while processing the request")

end

kong.response.set_status(status)

更改 Http 狀態碼,這個方法應該在 header_filter 段中使用,此時 Kong 準備將響應頭發送回客戶端

段:

rewrite, access, header_filter, admin_api

參數:

status(number):新的 Http 狀態碼

返回值:

無;無效的輸入拋出錯誤

用法:

kong.response.set_status(404)

kong.response.set_header(name, value)

設置響應頭,會覆蓋已經存在的響應頭,這個方法應該在 header_filter 段中使用,此時 Kong 準備將響應頭發送回客戶端

段:

rewrite, access, header_filter, admin_api

參數:

name(string): 響應頭的名稱

value(string,number,boolean):響應頭的值

返回值:

無;無效的輸入拋出錯誤

用法:

kong.response.set_header("X-Foo", "value")

kong.response.add_header(name, value)

設置響應頭,與 kong.response.set_header() 不同,這個方法不會覆蓋已經存在的響應頭,另外相同的響應頭可以繼續添加在響應中,這個方法應該在 header_filter 段中使用,此時 Kong 準備將響應頭發送回客戶端

段:

rewrite, access, header_filter, admin_api

參數:

name(string): 響應頭的名稱

value(string,number,boolean):響應頭的值

返回值:

無;無效的輸入拋出錯誤

用法:

kong.response.add_header("Cache-Control", "no-cache")

kong.response.add_header("Cache-Control", "no-store")

kong.response.clear_header(name)

刪除響應頭,這個方法應該在 header_filter 段中使用,此時 Kong 準備將響應頭發送回客戶端

段:

rewrite, access, header_filter, admin_api

參數:

name(string): 需要清除的響應頭的名稱

返回值:

無;無效的輸入拋出錯誤

用法:

kong.response.set_header("X-Foo", "foo")

kong.response.add_header("X-Foo", "bar")

kong.response.clear_header("X-Foo")

-- from here onwards, no X-Foo headers will exist in the response

kong.response.set_headers(headers)

設置響應頭,與 kong.response.set_header() 不同,headers 參數是一個 table,鍵是字符串格式,值是字符串或字符串數組,這個方法應該在 header_filter 段中使用,此時 Kong 準備將響應頭發送回客戶端,此方法會覆蓋已經存在的響應頭

段:

rewrite, access, header_filter, admin_api

參數:

headers(table)

返回值:

無;無效的輸入拋出錯誤

用法:

kong.response.set_headers({

["Bla"] = "boo",

["X-Foo"] = "foo3",

["Cache-Control"] = { "no-store", "no-cache" }

})

-- Will add the following headers to the response, in this order:

-- X-Bar: bar1

-- Bla: boo

-- Cache-Control: no-store

-- Cache-Control: no-cache

-- X-Foo: foo3

kong.response.exit(status[, body[, headers]])

段:

rewrite, access, admin_api, header_filter (僅當 body 為 nil 時)

參數:

status(number):Http 狀態碼

body(table,string,optional):響應體

headers(table,optional):響應頭

返回值:

無;無效的輸入拋出錯誤

用法:

return kong.response.exit(403, "Access Forbidden", {

["Content-Type"] = "text/plain",

["WWW-Authenticate"] = "Basic"

})

---

return kong.response.exit(403, [[{"message":"Access Forbidden"}]], {

["Content-Type"] = "application/json",

["WWW-Authenticate"] = "Basic"

})

---

return kong.response.exit(403, { message = "Access Forbidden" }, {

["WWW-Authenticate"] = "Basic"

})

kong.router

route 模塊包含一組方法,用于訪問請求的路由屬性

kong.router.get_route()

返回路由實體,請求與此路由匹配

段:

access, header_filter, body_filter, log

返回值:

路由實體,table 格式

用法:

if kong.router.get_route() then

-- routed by route & service entities

else

-- routed by a legacy API entity

end

kong.router.get_service()

返回當前服務實體,請求會路由到這個服務上

段:

access, header_filter, body_filter, log

返回值:

服務實體,table 格式

用法:

if kong.router.get_service() then

-- routed by route & service entities

else

-- routed by a legacy API entity

end

kong.service

service 模塊包含一組方法,用于操作請求連接到服務上的屬性,比如連接的主機,IP 地址或端口,用于負載均衡和健康檢查的 upstream 實體

kong.service.set_upstream(host)

設置所需的 upstream 實體處理請求的負載均衡,使用此方法相當于創建一個配置了 host 屬性的服務,并關聯到了相應的 upstream 實體(這種情況下,請求將代理到綁定到這個 upstream 的 target 上)

host 參數接收一個字符串,字符串內容需要與配置的 upstream 實體一致

段:

access

參數:

host(string)

返回值:

成功返回 true,沒有找到 upstream 實體返回 nil

錯誤發生時返回字符串格式的錯誤,沒有返回 nil

用法:

local ok, err = kong.service.set_upstream("service.prod")

if not ok then

kong.log.err(err)

return

end

kong.service.set_target(host, port)

設置代理該請求的主機和端口地址,使用這個方法相當于要求 Kong 在接收請求時不執行負載均衡階段,而是手動覆蓋它,這個請求還會忽略重試和健康檢查等負載均衡組件,host 參數為字符串格式,是一個(IPv4/IPv6地址),port 參數為端口號

段:

access

參數:

host(string)

port(number)

用法:

kong.service.set_target("service.local", 443)

kong.service.set_target("192.168.130.1", 80)

kong.service.set_tls_cert_key(chain, key)

設置與服務器端握手時使用的客戶端證書,chain 參數是由 ngx.ssl.parse_pem_cert 等方法返回的客戶端證書和中間鏈,key 參數是與 ngx.ssl.parse_pem_priv_key 等方法返回的客戶端證書對應的私鑰

段:

rewrite, access, balancer

參數:

chain(cdata):客戶端證書鏈

key(cdata):客戶端證書私鑰

返回值:

操作成功返回 true,發生錯誤返回 nil

錯誤發生時返回字符串格式的錯誤,沒有返回 nil

用法:

local chain = assert(ssl.parse_pem_cert(cert_data))

local key = assert(ssl.parse_pem_priv_key(key_data))

local ok, err = tls.set_cert_key(chain, key)

if not ok then

-- do something with error

end

kong.service.request

操作連接上服務的請求

kong.service.request.set_scheme(scheme)

在將請求路由到服務時設置 Http 協議

段:

access

參數:

schema(string):Http 協議,支持 http 或 https

返回值:

無;無效的輸入拋出錯誤

用法:

kong.service.request.set_scheme("https")

kong.service.request.set_path(path)

設置請求路徑,不包含請求參數

段:

access

參數:

path(string):請求路徑

返回值:

無;無效的輸入拋出錯誤

用法:

kong.service.request.set_path("/v2/movies")

kong.service.request.set_raw_query(query)

設置請求參數,query 參數是字符串格式(不包含 ? 字符),并且不會以任何方式處理,更高階的設置請求參數方法參考 kong.service.request.set_query()

段:

rewrite,access

參數:

query(string):原生的請求參數

返回值:

無;無效的輸入拋出錯誤

用法:

kong.service.request.set_raw_query("zzz&bar=baz&bar=bla&bar&blo=&foo=hello%20world")

kong.service.request.set_method(method)

設置 Http 方法

段:

rewrite,access

參數:

method(string):Http 方法,需要大小,支持的方法有:GET、HEAD、PUT、POST、DELETE、OPTIONS、MKCOL、COPY、MOVE、PROPFIND、PROPPATCH、LOCK、UNLOCK、PATCH、TRACE

返回值:

無;無效的輸入拋出錯誤

用法:

kong.service.request.set_method("DELETE")

kong.service.request.set_query(args)

設置請求參數,與 kong.service.request.set_raw_query() 不同,args 參數必須是 table 格式,鍵是字符串類型,值可以是布爾值、字符串或數組,所有字符串都進行 URL 編碼,生成的查詢字符串根據字典順序排序,保留同一鍵內的值順序,如果需要進一步控制生成請求參數,可以使用 kong.service.request.set_raw_query() 方法

段:

rewrite,access

參數:

args(table):

返回值:

無;無效的輸入拋出錯誤

用法:

kong.service.request.set_query({

foo = "hello world",

bar = {"baz", "bla", true},

zzz = true,

blo = ""

})

-- Will produce the following query string:

-- bar=baz&bar=bla&bar&blo=&foo=hello%20world&zzz

kong.service.request.set_header(header, value)

設置請求頭,會覆蓋已經存在的請求頭,如果 header 參數是 host(大小寫不敏感),會同時設置請求的 SNI

段:

rewrite,access

參數:

header(string):請求頭名稱

value(string,boolean,number):請求頭值

返回值:

無;無效的輸入拋出錯誤

用法:

kong.service.request.set_header("X-Foo", "value")

kong.service.request.add_header(header, value)

設置請求頭,與 kong.service.request.set_header() 不同,不會覆蓋已經存在的請求頭

段:

rewrite,access

參數:

header(string):請求頭名稱

value(string,boolean,number):請求頭值

返回值:

無;無效的輸入拋出錯誤

用法:

kong.service.request.add_header("Cache-Control", "no-cache")

kong.service.request.add_header("Cache-Control", "no-store")

kong.service.request.clear_header(header)

清除請求頭

段:

rewrite,access

參數:

header(string):請求頭名稱

返回值:

無;無效的輸入拋出錯誤

用法:

kong.service.request.set_header("X-Foo", "foo")

kong.service.request.add_header("X-Foo", "bar")

kong.service.request.clear_header("X-Foo")

-- from here onwards, no X-Foo headers will exist in the request

kong.service.request.set_headers(headers)

設置請求頭,與 kong.service.request.set_header() 不同,headers 參數必須是 table 格式的

段:

rewrite,access

參數:

headers(table):table 格式的請求頭集合

返回值:

無;無效的輸入拋出錯誤

用法:

kong.service.request.set_header("X-Foo", "foo1")

kong.service.request.add_header("X-Foo", "foo2")

kong.service.request.set_header("X-Bar", "bar1")

kong.service.request.set_headers({

["X-Foo"] = "foo3",

["Cache-Control"] = { "no-store", "no-cache" },

["Bla"] = "boo"

})

-- Will add the following headers to the request, in this order:

-- X-Bar: bar1

-- Bla: boo

-- Cache-Control: no-store

-- Cache-Control: no-cache

-- X-Foo: foo3

kong.service.request.set_raw_body(body)

設置請求體,body 參數必須是一個字符串,不會以任何方式處理處理,這個方法還會添加 Content-Length 頭,如果想設置空請求體,直接設置空字符串,更高階的設置參考 kong.service.request.set_body()

段:

rewrite,access

參數:

body(string):原始 body 請求體

返回值:

無;無效的輸入拋出錯誤

用法:

kong.service.request.set_raw_body("Hello, world!")

kong.service.request.set_body(args[, mimetype])

設置請求體,與 kong.service.request.set_body() 不同,args 必須是 table 格式,并且以 MIME type 格式編碼

如果 MIME type 是 application/x-www-form-urlencoded:

以 form-encoded 方式對參數進行編碼

如果 MIME type 是 multipart/form-data:

以 multipart form data 方式對參數進行編碼

如果 MIME type 是 application/json:

以 JSON 格式對參數進行編碼

段:

rewrite,access

參數:

args(table):請求體參數,會轉化成相應的格式

mimetype(string,optional)

返回值:

成功返回 true,失敗返回 nil

錯誤返回失敗信息,成果返回 nil

用法:

kong.service.set_header("application/json")

local ok, err = kong.service.request.set_body({

name = "John Doe",

age = 42,

numbers = {1, 2, 3}

})

-- Produces the following JSON body:

-- { "name": "John Doe", "age": 42, "numbers":[1, 2, 3] }

local ok, err = kong.service.request.set_body({

foo = "hello world",

bar = {"baz", "bla", true},

zzz = true,

blo = ""

}, "application/x-www-form-urlencoded")

-- Produces the following body:

-- bar=baz&bar=bla&bar&blo=&foo=hello%20world&zzz

kong.service.response

操作服務的響應

kong.service.response.get_status()

從服務返回的響應的 Http 狀態碼

段:

header_filter, body_filter, log

返回值:

從服務返回的響應的 Http 狀態碼,整數格式;如果請求未被代理,返回 nil

用法:

kong.log.inspect(kong.service.response.get_status()) -- 418

kong.service.response.get_headers([max_headers])

包含響應頭的 Lua table,與 kong.response.get_headers() 不同,該方法僅會返回服務返回的響應中的請求頭(忽略 Kong 本身添加的),如果請求未被代理到任何服務(比如被鑒權插件拒絕了并且產生了401響應),headers 值是 nil,因為服務沒有任何響應,默認情況下,該方法最多返回100個響應頭,可以指定 max_headers 調整這個值,參數范圍是1至1000

段:

header_filter, body_filter, log

參數:

max_header(number, optional):

返回值:

響應頭,table 格式

如果響應頭數目超過 max_headers,返回 truncated,字符串格式

用法:

-- Given a response with the following headers:

-- X-Custom-Header: bla

-- X-Another: foo bar

-- X-Another: baz

local headers = kong.service.response.get_headers()

if headers then

kong.log.inspect(headers.x_custom_header) -- "bla"

kong.log.inspect(headers.x_another[1]) -- "foo bar"

kong.log.inspect(headers["X-Another"][2]) -- "baz"

end

kong.service.response.get_header(name)

返回指定響應頭的值,與 kong.response.get_header() 不同,這個方法只會返回服務的響應中的請求頭(忽略 Kong 本身添加的)

段:

header_filter, body_filter, log

參數:

name(string):響應頭的名稱

返回值:

指定響應頭的值,字符串格式;如果沒有請求頭,返回 nil

用法:

-- Given a response with the following headers:

-- X-Custom-Header: bla

-- X-Another: foo bar

-- X-Another: baz

kong.log.inspect(kong.service.response.get_header("x-custom-header")) -- "bla"

kong.log.inspect(kong.service.response.get_header("X-Another")) -- "foo bar"

kong.table

Lua table 工具類

kong.table.new([narr[, nrec]])

返回一個 table,其中包含了預先分配的數組和散列

參數:

narr(number, optional):指定在數組組件中預分布的插槽數

nrec(number, optional):指定在散列組件中預分布的插槽數

返回值:

新創建的 table,table 格式

用法:

local tab = kong.table.new(4, 4)

kong.table.clear(tab)

清理 table

參數:

tab(table):需要被清理的 table

返回值:

用法:

local tab = {

"hello",

foo = "bar"

}

kong.table.clear(tab)

kong.log(tab[1]) -- nil

kong.log(tab.foo) -- nil

總結

以上是生活随笔為你收集整理的kong组件_Kong插件开发工具包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

黄在线免费看 | 日日躁夜夜躁xxxxaaaa | 欧美一级视频免费看 | 三三级黄色片之日韩 | 国产精品久久久久久久av电影 | 草免费视频 | 91成人免费| 特黄一级毛片 | 四虎在线免费观看 | 国产91精品久久久久久 | 亚洲国产视频直播 | 日韩高清精品一区二区 | 韩日在线一区 | 成人在线观看av | 中文字幕av播放 | 国产一区二区在线免费播放 | 96视频在线| 日本3级在线观看 | 国产97在线观看 | 欧美日韩久久不卡 | 国产高清在线永久 | 国产精品18久久久久久久久 | 一区二区三区国产欧美 | 欧美激情精品久久久久 | 亚洲 欧洲av | 黄色资源在线观看 | 啪啪小视频网站 | 日韩大片在线 | 一区二区三区在线免费播放 | 深夜免费福利在线 | 99久久婷婷国产一区二区三区 | 免费看黄视频 | 天天天插| 国产精品99精品 | 97香蕉超级碰碰久久免费软件 | ww视频在线观看 | 亚洲一级国产 | 欧美久久九九 | 免费一级片视频 | 久久久久黄 | 国产精品一区二区三区免费看 | 97人人超碰在线 | 国产伦精品一区二区三区无广告 | 久久婷婷一区 | 99视频+国产日韩欧美 | 亚洲精品美女久久17c | 一区二区精品国产 | 日韩在线电影一区二区 | 婷婷丁香久久五月婷婷 | 在线观看av麻豆 | 精品视频国产一区 | 黄色小说视频网站 | 五月视频 | 欧洲色综合 | 日韩三级视频 | 香蕉久草| 天天射天天干天天插 | 精品久久免费 | 天天躁日日躁狠狠 | 免费视频区 | 亚洲精品国内 | 免费三级av| 在线观看视频99 | 国产在线观看 | 丁香五月亚洲综合在线 | 成人av在线观 | 久久精品看片 | 精品亚洲午夜久久久久91 | 久久精品视频18 | www.在线观看av | 97福利| 丁香久久综合 | 九色视频网站 | 久久久国产高清 | 日韩av免费在线电影 | 免费a一级 | 久久久久国产精品厨房 | 在线亚州 | 欧美韩国日本在线观看 | 人人爽人人看 | 国产精品成人免费精品自在线观看 | 美女黄视频免费 | 日韩超碰在线 | 色婷婷激情电影 | 亚洲精品美女久久17c | 国产色资源 | 麻豆手机在线 | 国产精品第二页 | 日韩有色 | 欧美久久久影院 | 亚洲精品91天天久久人人 | 久久成人亚洲欧美电影 | 精品婷婷| 97超碰.com| 伊人天堂av| 人人干人人搞 | 视频一区二区三区视频 | 亚洲伦理中文字幕 | 亚洲一级免费电影 | 在线播放精品一区二区三区 | 91精品国产自产在线观看永久 | 在线观看视频福利 | 欧美日韩亚洲第一页 | 国产精品久久久久久久久久久久久 | 天天爱天天射天天干天天 | 一区二区三区在线看 | 色视频成人在线观看免 | 久久久精品二区 | 超级碰碰视频 | 正在播放一区 | 国产高清亚洲 | 91中文字幕永久在线 | 狠狠干夜夜操 | 91麻豆传媒| 亚洲涩涩网 | 九九热精品国产 | 亚洲精品白浆高清久久久久久 | 日韩精品视频久久 | 日韩在线播放视频 | 久射网 | 久久久九九 | 国产理论一区二区三区 | 97超碰资源 | 日韩美在线观看 | 久草视频中文在线 | 丰满少妇在线观看资源站 | 狠狠色综合欧美激情 | 日韩av在线不卡 | 成人a免费视频 | 精品欧美小视频在线观看 | 亚洲1区在线 | av黄色影院 | 国产成人99av超碰超爽 | 一区二区三区日韩视频在线观看 | 亚洲日本中文字幕在线观看 | 免费欧美 | 久久草在线精品 | 免费在线一区二区 | 国产91国语对白在线 | a资源在线 | 日韩中文字幕亚洲一区二区va在线 | 91免费日韩 | 一区精品久久 | 久久国产片 | 日韩免费一二三区 | 国产成人精品亚洲日本在线观看 | 日日夜夜天天久久 | 91精品国产自产在线观看永久 | 日日夜夜免费精品视频 | 最近更新好看的中文字幕 | 欧美成人69av | 亚洲人毛片 | 超碰在线97免费 | 国产精品久久久久久999 | 黄色三级在线观看 | 久久久国产精品视频 | 久草精品国产 | 中文字幕亚洲不卡 | 日韩中文三级 | 九九在线视频 | 久久久久一区 | 在线观看日韩免费视频 | 国产爽妇网 | 国产精品久久久久久久久久久免费看 | 人人爽人人澡人人添人人人人 | 亚洲最大激情中文字幕 | 99久久久国产精品美女 | 国产精品久久久777 成人手机在线视频 | 日韩精品五月天 | 国产成人精品av在线 | 久久综合久久久久88 | 婷婷激情站 | 99精品国产一区二区三区麻豆 | 日韩免费在线观看视频 | 久久99国产精品 | 精品国产美女在线 | 午夜丁香网 | 国产免费资源 | 国产理论一区二区三区 | 四虎伊人| 99高清视频有精品视频 | 91福利视频免费 | 99精品免费网| 日批视频在线观看免费 | 91精品1区 | 在线视频 国产 日韩 | 韩国三级av在线 | 九九综合久久 | 国产99一区视频免费 | 91精品国自产拍天天拍 | 欧美日本不卡视频 | 国产午夜精品一区二区三区 | 中文字幕一区二区三区视频 | 亚洲日本中文字幕在线观看 | 精品视频免费看 | 黄色大片视频网站 | 91爱爱中文字幕 | 久久天天躁 | 九九九九九九精品任你躁 | 婷五月天激情 | www黄色com | 99视频免费在线观看 | 青青久草在线 | 91精品毛片 | 在线免费观看视频一区二区三区 | 亚洲日韩中文字幕在线播放 | 国产va在线观看免费 | 99在线热播精品免费 | 日韩专区在线观看 | 久久成人亚洲欧美电影 | 一区二区中文字幕在线 | 中文字幕电影高清在线观看 | 中文字幕在线观看日本 | 成年人免费看的视频 | 久久久国产一区二区三区四区小说 | 九九免费观看视频 | 好看的国产精品视频 | 久草免费电影 | 亚州视频在线 | 免费的黄色的网站 | 91原创在线观看 | 国产小视频在线免费观看 | 国产麻豆成人传媒免费观看 | 成人av一区二区在线观看 | 五月天六月婷婷 | 亚洲另类视频在线观看 | 狠狠狠色丁香综合久久天下网 | 久久歪歪 | 日本bbbb摸bbbb | 在线草 | 亚洲精品1区2区3区 超碰成人网 | 黄色精品一区二区 | 国产自制av | 国产福利91精品一区 | 亚洲永久精品在线观看 | 在线观看免费福利 | 欧美精品免费视频 | 国产精品美女毛片真酒店 | 亚洲成a人片综合在线 | 日韩欧美高清不卡 | 免费中文字幕在线观看 | 日韩三级视频在线观看 | 香蕉久草 | 免费观看成年人视频 | 成人在线观看影院 | 在线观看免费视频 | 欧美日韩另类在线观看 | 亚洲国产69 | 成人av免费在线 | 黄色福利视频网站 | 在线观看视频中文字幕 | 91精品国自产在线 | 友田真希x88av | 国产小视频免费在线网址 | 国产精品 日韩 欧美 | 欧美美女视频在线观看 | 亚洲综合爱| 国产偷在线 | 91av在线电影 | 久久精选| 日韩在线高清免费视频 | 中文视频在线播放 | 97在线免费观看 | 一区二区三区电影大全 | 免费av在线网站 | 97超碰色 | 日韩av网页| 欧美日韩电影在线播放 | 在线视频日韩欧美 | 国产国语在线 | 日韩网站视频 | 色视频成人在线观看免 | 中文在线免费看视频 | 天堂中文在线视频 | 久久国产亚洲 | 成人av高清在线观看 | 国语精品久久 | 91精品爽啪蜜夜国产在线播放 | 日日干综合 | 天天夜夜操 | 亚州精品一二三区 | 欧美日韩激情网 | 蜜臀av夜夜澡人人爽人人 | 久久不射电影网 | 亚洲最新视频在线播放 | 天天操天天添天天吹 | 亚洲黄色免费网站 | 国产黄色一级片在线 | 日韩一二三在线 | 91久久精品一区二区二区 | 免费看色网站 | 欧美日韩在线观看一区二区三区 | 中文字幕 第二区 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 97电影网站 | 日韩视频在线一区 | 美女黄网站视频免费 | 99精品在线免费视频 | 欧美在线一二 | 在线视频欧美亚洲 | 欧美视频18 | 国产精品久久久久婷婷二区次 | 国产一级做a | 91成人网在线观看 | 成人影视片 | 六月色丁 | 在线91播放| av电影在线免费 | 久久电影色 | 中文字幕日韩在线播放 | 女人18毛片a级毛片一区二区 | 美女视频黄,久久 | 色99色| 五月天天在线 | 免费a一级| 99视频精品 | 黄色福利视频网站 | 女人高潮一级片 | 精品国产精品一区二区夜夜嗨 | 国产精品福利在线播放 | 久久久天天操 | 成人一区不卡 | 天天操夜夜想 | 欧美另类人妖 | 国产高清久久 | 色吊丝在线永久观看最新版本 | 国产福利在线不卡 | 日韩精品最新在线观看 | 久草在线高清视频 | 欧洲av不卡 | 韩国精品一区二区三区六区色诱 | 色a综合 | www日韩| 精品91| 婷婷丁香综合 | 国产一区免费视频 | 在线视频精品播放 | 国产裸体视频bbbbb | 性色av一区二区三区在线观看 | 超碰免费观看 | 碰超在线观看 | 伊人资源站 | 一级黄色在线视频 | 久久午夜网 | 在线免费91| 中文字幕欧美日韩va免费视频 | 欧美精品中文 | 国产一区视频免费在线观看 | 亚洲人成综合 | 超碰97在线资源 | 中文字幕av电影下载 | 欧美小视频在线 | 日韩三级av | 91精品久久久久久综合乱菊 | 婷婷国产视频 | 国产精品人人做人人爽人人添 | 香蕉在线观看视频 | 成人在线观看资源 | 91精品一| 2023国产精品自产拍在线观看 | 久久99国产精品久久99 | 1区2区视频 | 国产美腿白丝袜足在线av | 插插插色综合 | 久久婷亚洲五月一区天天躁 | 天天se天天cao天天干 | 色综合五月| 狠狠色综合网站久久久久久久 | 日日麻批40分钟视频免费观看 | 亚洲国产成人高清精品 | 国产精品丝袜久久久久久久不卡 | 亚洲国产精久久久久久久 | 懂色av一区二区三区蜜臀 | 亚洲人成综合 | 爱情影院aqdy鲁丝片二区 | 中文字幕一区二区三区在线视频 | 91一区啪爱嗯打偷拍欧美 | 四虎www com| 免费网站看v片在线a | 久久综合9988久久爱 | 亚洲成免费 | 免费裸体视频网 | av电影不卡在线 | 久久久久99精品国产片 | 国产视频一区二区三区在线 | 91网免费观看 | 国产一级在线看 | 国产高清绿奴videos | 日韩黄色在线观看 | 免费亚洲婷婷 | 亚洲国产精品激情在线观看 | 中文字幕精品三区 | 高清中文字幕 | 久久黄色a级片 | 亚洲一区视频免费观看 | 久久久午夜剧场 | 中文字幕在线观看一区二区三区 | 免费av片在线 | 精品在线免费视频 | 狠狠婷婷 | 激情五月播播久久久精品 | 国产日韩精品一区二区在线观看播放 | 国产品久精国精产拍 | 亚洲精品福利视频 | 毛片美女网站 | 二区三区av | 在线观看深夜视频 | 中文字幕免费高清在线观看 | 99免在线观看免费视频高清 | 美女网站在线观看 | 人人涩| 久久精品一二三区白丝高潮 | 韩日精品在线 | www.黄色小说.com| 91精品国产自产91精品 | 网站在线观看你们懂的 | 欧美激情视频一区二区三区免费 | 日韩免费在线网站 | 久久不见久久见免费影院 | 高清在线观看av | 国产又粗又长又硬免费视频 | av免费电影在线观看 | av大片免费在线观看 | 91精品国产福利在线观看 | 一级黄色片毛片 | 在线观看成人网 | 亚洲精品午夜视频 | 国产精国产精品 | 免费网站黄 | 黄色亚洲在线 | 99久久99热这里只有精品 | 黄色在线网站噜噜噜 | 91九色免费视频 | 天天爱天天射天天干天天 | 91三级视频| 日韩国产欧美在线视频 | 成人av免费网站 | 91视频在线观看免费 | 午夜精品久久久久久中宇69 | 操操综合 | 亚洲精品在线视频网站 | 热久久最新地址 | 91精品国自产在线观看 | 日本精品视频一区二区 | 亚洲一区欧美精品 | 欧美视频网址 | 免费在线观看日韩 | 色偷偷88欧美精品久久久 | 国产亲近乱来精品 | 午夜12点 | 国产第一福利 | 国产91精品看黄网站 | 亚洲乱亚洲乱亚洲 | 午夜精品久久 | 国产精品高清在线 | av经典在线| 偷拍久久久 | 人人爽人人澡 | 午夜av电影院 | 揉bbb玩bbb少妇bbb | 少妇按摩av | 亚洲一区网站 | 久久全国免费视频 | 亚洲开心激情 | 亚州欧美视频 | 久久久久国产精品午夜一区 | 丰满少妇在线观看 | 99免费精品视频 | 999久久久免费视频 午夜国产在线观看 | 国产大片免费久久 | 2021国产精品视频 | 午夜久久久影院 | 在线黄色av电影 | 日韩最新在线 | 久久久精品国产一区二区电影四季 | 亚洲精品日韩在线观看 | 亚洲国产精品电影 | 操操操日日日干干干 | 激情电影影院 | 日韩av影视在线观看 | 久久天天综合网 | 可以免费观看的av片 | 国产在线精品观看 | 麻豆视频在线免费观看 | 免费网站污 | 久久综合网色—综合色88 | 日韩乱码中文字幕 | 全黄色一级片 | 国产 视频 高清 免费 | 久久99九九99精品 | 亚洲高清av在线 | 国产91欧美 | 欧洲精品一区二区 | 免费看三级网站 | 午夜国产在线观看 | 国产欧美高清 | 欧美激情xxxx性bbbb | 国产精品视频免费在线观看 | 一区二区三区视频网站 | 亚洲人人av| 狠狠色丁香久久婷婷综合丁香 | 四虎影视国产精品免费久久 | 国产中文伊人 | 日韩中文字幕一区 | 日韩在线视频精品 | 夜夜躁狠狠躁日日躁 | 久久久国产电影 | 亚洲精品啊啊啊 | 国产一区二区在线播放 | 91视频免费 | 中文字幕 国产 一区 | 黄色av高清 | 免费福利视频网站 | 夜夜夜精品| 日韩黄色在线电影 | 日韩免费大片 | 五月天丁香亚洲 | 欧美91精品国产自产 | a色网站 | 久久久久女人精品毛片九一 | 在线黄色免费 | 91av手机在线观看 | 99热在线看 | 亚洲乱码久久久 | 操操综合| 69精品在线观看 | 久久国产精品免费看 | 五月天激情电影 | 国产精品视频999 | 久视频在线播放 | 亚洲精品黄网站 | 国产精品爽爽久久久久久蜜臀 | 2018好看的中文在线观看 | 久久99这里只有精品 | 深夜免费福利网站 | 91九色免费视频 | 日韩精品中文字幕在线不卡尤物 | 粉嫩高清一区二区三区 | 国产高清在线免费视频 | 亚洲精品视频免费在线观看 | 亚洲一区二区三区四区精品 | 欧美与欧洲交xxxx免费观看 | 国产亚洲精品久 | 国产精品剧情 | 国产一级黄色电影 | 国产精品手机在线观看 | 国产专区视频 | 国产精品美女久久久久久 | 国产精品精品久久久 | 国产综合小视频 | 亚洲男人天堂a | 久久久久久高潮国产精品视 | 婷婷在线免费 | 国产精品igao视频网网址 | 91高清视频 | 免费看片网页 | 午夜久久福利 | 亚洲视频 在线观看 | 三级av片 | 日日日操 | 日韩欧美高清在线观看 | 91禁在线看 | 激情五月色播五月 | 精品久久免费 | 91成人在线观看高潮 | 91精品国自产拍天天拍 | 999久久国精品免费观看网站 | 色av男人的天堂免费在线 | 99精品欧美一区二区三区黑人哦 | 久久婷婷精品视频 | 美女免费电影 | www.黄色片网站 | 日韩色综合网 | av网址aaa | 亚洲国产精品一区二区尤物区 | 亚州av一区 | 国产天天爽 | 欧美91精品国产自产 | 久久久免费毛片 | 色欲综合视频天天天 | 99热这里只有精品免费 | 91在线视频网址 | 久热色超碰 | www.av在线播放 | 天天爽网站 | 免费在线激情电影 | 日本中文字幕网站 | 国产精品96久久久久久吹潮 | 国产综合在线视频 | 色视频网页 | 色香蕉在线 | 婷婷激情综合五月天 | 字幕网资源站中文字幕 | 91精品综合在线观看 | 黄色av电影在线观看 | 99re中文字幕| 国产一区二区观看 | 999成人免费视频 | 精品99在线观看 | 久热免费在线 | 国产九色91 | 国产小视频在线 | 99av在线视频 | 国产视频一| 18国产精品福利片久久婷 | 久久综合电影 | 激情久久久久 | 不卡电影免费在线播放一区 | 91视频麻豆| 天天射天天干天天爽 | 亚洲一级片在线观看 | 久久视频网 | 亚洲影视资源 | 国产成人一区二区三区影院在线 | 一区二区三区国产欧美 | 久热av在线 | 国产日韩欧美在线一区 | 九九九九九九精品任你躁 | 91麻豆看国产在线紧急地址 | 99久久网站 | 99精品视频免费看 | 狠狠狠色丁香综合久久天下网 | 日韩av不卡播放 | 91九色精品 | 国产免费三级在线观看 | 五月婷婷久| 久久精品99视频 | 69xx视频 | 国产99在线免费 | 成 人 黄 色 片 在线播放 | 日韩欧美国产精品 | 亚洲人精品午夜 | 在线看片日韩 | 国产精品久久一区二区三区不卡 | 人人玩人人添人人澡97 | 亚洲免费在线看 | 九九九在线 | 免费观看成人av | 中文字幕资源站 | 亚洲五月| 亚洲欧美在线综合 | 天堂网一区二区 | 天天曰天天爽 | 国产亚洲精品久久久久久电影 | 在线观看亚洲免费视频 | 国产中文字幕国产 | 99热这里只有精品国产首页 | 五月导航 | 日韩精品一区二区三区免费观看 | 日韩黄色免费看 | 国产精品v欧美精品v日韩 | 狠狠色丁香婷婷综合久久片 | 一级黄色片网站 | 伊人狠狠干 | 成人午夜精品久久久久久久3d | 国产999精品 | 98超碰人人 | 97视频一区| 日韩精品中文字幕久久臀 | 成人免费看视频 | adn—256中文在线观看 | 探花视频免费观看 | 日韩成人精品一区二区 | 免费观看成人网 | 国产精品久久久毛片 | 在线精品一区二区 | 99久在线精品99re8热视频 | 日韩毛片在线一区二区毛片 | 亚洲精品综合在线观看 | 夜夜躁日日躁狠狠躁 | av一区二区三区在线播放 | 日韩激情三级 | 日日日日日 | 国产精品久久久久久一二三四五 | 午夜久久福利影院 | 激情丁香久久 | 亚洲开心激情 | 亚洲国产合集 | 欧美成人久久 | 国产在线视频一区二区三区 | 高清av在线 | 一区二区三区四区久久 | 9在线观看免费高清完整版 玖玖爱免费视频 | 天天干,天天射,天天操,天天摸 | 成 人 黄 色 片 在线播放 | 激情av资源网 | 四虎影视欧美 | 日韩网站一区二区 | 玖玖视频在线 | av成人免费在线 | 伊香蕉大综综综合久久啪 | 中文字幕亚洲欧美 | 亚洲成人xxx | 在线免费黄 | 国产破处在线视频 | 久草在线91 | 91最新视频在线观看 | 亚洲午夜精品在线观看 | 国产又粗又猛又色 | 天海冀一区二区三区 | 欧美另类交在线观看 | 免费av网站观看 | 91女人18片女毛片60分钟 | 国产精品免费一区二区三区在线观看 | 精品欧美在线视频 | 亚洲欧洲视频 | 国产精品久久电影网 | 婷婷六月网| av手机在线播放 | 日韩大片在线免费观看 | 91视频国产高清 | 91av99| 激情综合久久 | 国内精品久久久久久久久久久 | 久久艹久久 | 国产只有精品 | 亚洲精品日韩一区二区电影 | 91亚洲国产 | 天天操天天色天天射 | 成人免费在线观看入口 | 久久久亚洲精华液 | 国产高清在线免费观看 | 国产午夜精品一区二区三区欧美 | 97色免费视频| 亚洲三级网站 | 91超级碰| 欧美在线视频一区二区三区 | 在线精品亚洲一区二区 | 麻豆视频免费在线观看 | 欧洲激情在线 | 日本中文在线播放 | 丝袜美腿在线播放 | 亚洲五月六月 | 国产很黄很色的视频 | 高清国产一区 | 久久久精品网站 | 亚洲理论在线观看 | 在线观看aa | 国产精品日韩在线观看 | 日韩一区二区免费播放 | 99 久久久久 | 91精品综合在线观看 | 日韩欧美精品一区二区三区经典 | 国内精品久久久精品电影院 | 亚洲最大成人网4388xx | 正在播放日韩 | 国产色婷婷精品综合在线手机播放 | 福利视频精品 | 亚洲免费精彩视频 | 国产在线视频资源 | 91精品国产91久久久久福利 | 免费在线观看视频a | 97超碰超碰久久福利超碰 | 国产在线免费 | 中文字幕在线人 | 国产精品久久久久久久午夜片 | a天堂一码二码专区 | 在线免费观看亚洲视频 | 99操视频| 人人草网站 | 亚洲3级| 中文字幕在线电影 | 精品久久久久久久久中文字幕 | 国产一级在线观看视频 | 亚洲午夜精品一区 | 黄色a在线 | 夜夜躁日日躁狠狠躁 | 久久免费视频国产 | 欧美一级xxxx | 丁香婷婷在线 | 成人免费视频播放 | 免费在线观看av电影 | 国产高清视频色在线www | 欧美一区二区三区在线视频观看 | 91av资源网| 国产三级国产精品国产专区50 | www.天天干 | 国产在线精品一区二区不卡了 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久久久亚洲最大xxxx | 一区二区三区在线观看 | 91一区二区三区在线观看 | 蜜臀av性久久久久av蜜臀妖精 | 精品久久久久久久久久岛国gif | 激情在线免费视频 | 国产成人777777 | 日韩一区二区在线免费观看 | 久草男人天堂 | av怡红院 | 免费观看一区二区 | 精品国产精品国产偷麻豆 | 国产中文字幕视频在线观看 | 日韩av网站在线播放 | 亚洲片在线资源 | 午夜精品久久久久久久99无限制 | 色综合小说 | 中国一 片免费观看 | 日本aaaa级毛片在线看 | 久99久精品 | 日韩va在线观看 | 久久国产精品区 | 国产精品一区二区三区电影 | 欧美aaa大片 | 色久天 | 伊人久久电影网 | 久久久蜜桃一区二区 | a天堂在线看 | 免费在线观看av网站 | 东方av免费在线观看 | 美女视频a美女大全免费下载蜜臀 | 精品高清美女精品国产区 | 国产精品青草综合久久久久99 | 久久国产精品系列 | 夜夜澡人模人人添人人看 | 国产成人综 | 免费在线视频一区二区 | 成人小视频在线播放 | 99久久精品久久亚洲精品 | 久艹视频免费观看 | 国产精品久久久久久久久久久免费 | 精品黄色在线观看 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 亚洲激情在线播放 | 欧美激情精品久久久久久变态 | 久久久国产精品亚洲一区 | 免费看特级毛片 | 国产精品av电影 | 97av在线视频免费播放 | 性色av免费看 | 911在线| 成人a v视频 | 国产中文字幕三区 | 911免费视频 | 国产91电影在线观看 | 精品亚洲视频在线观看 | 2021国产精品| 国内丰满少妇猛烈精品播放 | 国产小视频在线免费观看视频 | 99精品热视频只有精品10 | 激情 一区二区 | 日韩综合视频在线观看 | 亚洲传媒在线 | 亚洲欧美综合 | 国产精品成人国产乱一区 | 91av在线播放 | 亚洲一区网 | 日本中文字幕久久 | 六月婷婷网 | 99久精品视频 | 精品在线看| 人人舔人人爱 | 韩日精品在线 | 国产丝袜美腿在线 | 欧美日韩国产二区三区 | 久久精品久久国产 | 成人国产电影在线观看 | 日韩欧美高清在线观看 | 成 人 免费 黄 色 视频 | 在线观看的黄色 | 亚洲精品国产综合99久久夜夜嗨 | 日韩免费网站 | 国产日产精品一区二区三区四区的观看方式 | 黄色av一区二区 | 久久久九九| 亚洲美女视频在线观看 | 久热免费在线 | 天天综合导航 | 丰满少妇高潮在线观看 | 国产黄色精品在线观看 | 国产精品日韩欧美 | 观看免费av| 久久激情小视频 | 综合久久婷婷 | 亚洲国产成人精品久久 | 超碰电影在线观看 | 成人免费一级片 | 四季av综合网站 | 日躁夜躁狠狠躁2001 | 国产91亚洲精品 | 国产一级片久久 | 日韩av伦理片 | 久久久2o19精品 | 亚洲精品国产品国语在线 | 五月婷婷视频 | 97超级碰碰 | av高清不卡 | 久久手机在线视频 | 欧美日韩国产一区二区三区在线观看 | 97超碰人人澡人人 | 999视频在线播放 | 91国内产香蕉 | www91在线观看| 免费观看一区二区 | 一区在线电影 | 国产成人精品在线观看 | 精品国产电影 | 日本久久久亚洲精品 | 久久久久伦理电影 | 成人午夜影院 | www.天天成人国产电影 | 国产视频在线观看免费 | 天天操夜夜操国产精品 | 免费成人av| 精品一区在线 | 久久视频这里有精品 | 久久精国产 | av成人在线播放 | 91免费网址| 激情综合色综合久久综合 | 日韩伦理片一区二区三区 | 日本中文字幕在线播放 | 久久这里只有精品久久 | 欧美最猛性xxxx | 欧美日韩在线观看一区 | 欧美午夜精品久久久久久孕妇 | 国产不卡在线观看 | 天堂av在线网址 | 最近免费观看的电影完整版 | 97在线观看免费高清完整版在线观看 | 久久久久久久久久久网站 | 激情视频免费观看 | 91原创在线观看 | 69国产精品成人在线播放 | 国产v在线观看 | 日韩精品一区二区久久 | 欧美精品久久久久久久 | 国产视频一区二区三区在线 | 狠狠干五月天 | 久久久精选 | 国产精品成人aaaaa网站 | 蜜臀久久99精品久久久无需会员 | 色六月婷婷 | 欧美精品二 | 欧美日韩免费一区二区三区 | 韩国精品一区二区三区六区色诱 | 色偷偷888欧美精品久久久 | 国产精品123 | 99午夜| 久草在线官网 | 首页中文字幕 | 丁香五月亚洲综合在线 | 免费在线观看av网址 | 日本久久精| 在线免费黄网站 | 91精品一区二区三区久久久久久 | 在线免费黄色av | 91视频成人免费 | 精品中文字幕在线播放 | 婷婷精品国产一区二区三区日韩 | 亚洲精品久久久久久久不卡四虎 | 亚洲国产美女精品久久久久∴ | 亚洲第一香蕉视频 | 丁香花中文字幕 | 国模视频一区二区三区 | 久久96国产精品久久99软件 | 色香蕉在线| 国产一区二区不卡视频 | 成人免费视频视频在线观看 免费 | 国产精品第一页在线观看 | 中国成人一区 | 丁香久久婷婷 | 在线午夜av | 久久这里只有精品23 | 亚洲乱码国产乱码精品天美传媒 | 国产视频在| 不卡精品视频 | 久久精品波多野结衣 | 亚洲天天草 | 久久久久99精品国产片 | 91大神一区二区三区 | 五月天婷亚洲天综合网鲁鲁鲁 | 久久精品中文字幕一区二区三区 | 国产精品欧美久久久久天天影视 | 国产亚洲精品日韩在线tv黄 | 黄色91在线观看 | 韩国在线视频一区 | 日韩精品观看 | 国产黄色精品在线 | 中文字幕日韩在线播放 | 国产精品美女久久久久久久久 | 波多野结衣在线视频一区 | 免费视频在线观看网站 | 91pony九色丨交换 | 毛片视频网址 | 九九热免费视频在线观看 | 日韩丝袜在线 | 成年人黄色免费视频 | av在线免费观看黄 | 日韩国产精品一区 | 麻豆国产精品视频 | www.久久视频| 日本最新中文字幕 | 国产精品美女视频网站 | 成人午夜精品福利免费 | 久久艹在线观看 | 久久久国产精品免费 | 亚洲一区二区三区91 | 丁香导航 |