英语法语西班牙语

Ad


OnWorks 网站图标

haproxy-lua - 云端在线

在 OnWorks 免费托管服务提供商中通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器运行 haproxy-lua

这是命令 haproxy-lua,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


haproxy-lua - haproxy-lua 文档

代理服务器 LUA 跑步 语境


在 HAProxy 中执行的 Lua 代码可以在 2 种主要模式下进行处理。 第一个是
初始化 模式,第二个是 运行 模式.

· 在里面 初始化 模式,我们可以执行 DNS 解析,但我们不能执行套接字 I/O。
在这种初始化模式下,HAProxy 在 Lua 的执行过程中仍然被阻塞
程序。

· 在里面 运行 模式,我们无法执行 DNS 解析,但我们可以使用套接字。 这
Lua 代码的执行与请求处理复用,因此 Lua 代码
似乎是在阻塞中运行,但事实并非如此。

Lua 代码加载在一个或多个文件中。 这些文件包含主要代码和功能。
Lua 有 6 个执行上下文。

1. Lua文件 身体 上下文. 它在加载 Lua 文件期间执行
HAProxy的 [全球] 带有指令的部分 lua加载. 它在初始化时执行
模式。 本节用于在 HAProxy 中配置 Lua 绑定。

2. 路亚 初始化 上下文. 它是一个在HAProxy之后执行的Lua函数
配置解析。 执行处于初始化模式。 在这种情况下
HAProxy 环境已经初始化。 检查配置很有用,或者
初始化套接字连接或任务。 这些函数在主体中声明
Lua 函数的上下文 core.register_init(). 该函数的原型是
没有返回值和参数的简单函数,如下所示: 功能 fcn().

3. 路亚 任务 上下文. 是HAProxy启动后执行的Lua函数
调度程序,并在使用 Lua 函数声明任务之后
core.register_task(). 该上下文可以与流量处理并发。 这是
在运行时模式下执行。 函数的原型是一个简单的函数,没有
返回值且不带参数,如下所示: 功能 fcn().

4. 行动 上下文. 它是一个有条件执行的 Lua 函数。 这些动作是
由 Lua 指令注册“core.register_action()》。Lua的原型
被调用的函数是一个不返回任何东西并且接受一个对象的函数
类 TXN 作为条目。 功能 FCN(TXN).

5. 取样 上下文. 此函数将 TXN 对象作为入口参数,并且
返回一个字符串。 这些类型的函数不能执行任何阻塞函数。 他们
可用于聚合一些原始 HAProxy 样本提取并返回结果。
该函数的原型是 功能 绳子 FCN(TXN). 这些功能可以
注册到 Lua 函数 core.register_fetches(). 每个声明的样本获取是
以字符串“lua.”为前缀。

注意: 有可能是这个函数在原来找不到需要的数据
HAProxy 采样,在这种情况下,它无法返回结果。 这个案子还没有
支持的

6. 变流器 上下文. 它是一个 Lua 函数,它接受一个字符串作为输入并返回
另一个字符串作为输出。 这些类型的函数是无状态的,它无法访问
任何上下文。 它们不执行任何阻塞功能。 调用原型是 功能
绳子 fcn(字符串). 这个函数可以用Lua函数注册
core.register_converters(). 每个声明的转换器都以字符串“lua.”为前缀。

代理服务器 LUA 你好 世界


HAProxy 配置文件(你好_world.conf):

全球化
lua 加载 hello_world.lua

监听代理
绑定 127.0.0.1:10001
tcp 请求检查延迟 1s
tcp 请求内容使用服务 lua.hello_world

HAProxy Lua 文件(你好_world.lua):

core.register_service("hello_world", "tcp", function(applet)
小程序:发送(“你好世界\n”)
结束)

如何启动 HAProxy 来测试这个配置:

./haproxy -f hello_world.conf

在其他终端上,您可以使用 telnet 进行测试:

#:~ 远程登录 127.0.0.1 10001
你好世界

核()
“核心”类包含所有 HAProxy 核心功能。 这些功能很有用
用于控制执行流程、注册钩子、操作全局映射
或ACL,...

“核心”类基本上是随 HAProxy 提供的。 不 要求 线需要
使用这些功能。

“核心”类是静态的,不可能创建这种类型的新对象。

核心.emerg

退货政策
整数

该属性是一个整数,它包含日志级别“紧急”的值
(0)。

核心警报

退货政策
整数

该属性是一个整数,它包含日志级别“警报”(1) 的值。

核心暴击

退货政策
整数

该属性是一个整数,它包含日志级别“关键”(2) 的值。

核心错误

退货政策
整数

该属性是一个整数,它包含日志级别“错误”(3) 的值。

核心警告

退货政策
整数

该属性是一个整数,它包含日志级别“警告”(4) 的值。

核心提示

退货政策
整数

该属性是一个整数,它包含日志级别“通知”(5) 的值。

核心信息

退货政策
整数

该属性是一个整数,它包含日志级别“信息”(6) 的值。

内核调试

退货政策
整数

该属性是一个整数,它包含日志级别“调试”(7) 的值。

core.log(日志级别, 留言)
上下文:主体、初始化、任务、动作、样本获取、转换器

该函数发送日志。 发送日志,根据HAProxy
配置文件,在默认系统日志服务器上(如果已配置)和
如果允许,则为 stderr。

参数

· 日志级别 (整数) -- 是与消息相关的日志级别。 它是一个
0 到 7 之间的数字。

· 味精 (绳子) -- 日志内容。

我们 core.emerg,core.alert,core.crit,core.err,core.warning,core.notice,
core.info、core.debug(日志级别定义)

我们 代码调试

我们 核心信息

我们 核心警告

我们 核心警报

内核调试(味精)
上下文:主体、初始化、任务、动作、样本获取、转换器

参数

· 味精 (绳子) -- 日志内容。

我们 日志

做同样的工作:

功能 调试(味精)
核心日志(核心调试,味精)
结束

核心信息(味精)
上下文:主体、初始化、任务、动作、样本获取、转换器

参数

· 味精 (绳子) -- 日志内容。

我们 日志

功能 资料包(味精)
核心日志(核心信息,味精)
结束

核心警告(味精)
上下文:主体、初始化、任务、动作、样本获取、转换器

参数

· 味精 (绳子) -- 日志内容。

我们 日志

功能 警告(味精)
核心日志(核心警告,味精)
结束

核心警报(味精)
上下文:主体、初始化、任务、动作、样本获取、转换器

参数

· 味精 (绳子) -- 日志内容。

我们 日志

功能 警惕(味精)
核心日志(核心警报,味精)
结束

core.add_acl(文件名, 键)
上下文: 初始化、任务、动作、样本获取、转换器

添加访问控制列表 在文件引用的 ACL 列表中 文件名.

参数

· 文件名 (绳子) -- 引用 ACL 条目的文件名。

· (绳子) -- 将要添加的键。

core.del_acl(文件名, 键)
上下文: 初始化、任务、动作、样本获取、转换器

删除key引用的ACL条目 在引用的 ACL 列表中
文件名.

参数

· 文件名 (绳子) -- 引用 ACL 条目的文件名。

· (绳子) -- 将被删除的键。

core.del_map(文件名, 键)
上下文: 初始化、任务、动作、样本获取、转换器

在引用的映射列表中删除使用指定键索引的映射条目
通过他的文件名。

参数

· 文件名 (绳子) -- 引用映射条目的文件名。

· (绳子) -- 将被删除的键。

核心.msleep(毫秒)
上下文:主体,初始化,任务,动作

核心.msleep() 在指定的毫秒之间停止 Lua 执行。

参数

· 毫秒 (整数) -- 所需的毫秒数。

core.register_action(名称, 动作, 功能)
上下文: 身体

注册一个作为动作执行的 Lua 函数。 所有注册的动作都可以使用
在带有前缀“lua.”的 HAProxy 中。 一个动作获取一个 TXN 对象类作为输入。

参数

· 姓名 (绳子) -- 是转换器的名称。

· 行动 () -- 是描述 HAProxy 操作的字符串表
想注册到。 预期的动作是“tcp-req”、“tcp-res”、
“http-req”或“http-res”。

· FUNC (功能) -- 是调用作为转换器工作的 Lua 函数。

用作参数的 Lua 函数的原型是:

功能(交易)

·

TXN (TXN ): Free Introduction is a TXN 对象 用过的 操纵
当前请求或 TCP 流。

这里是一个动作注册的例子。 动作 juste 在
日志。

core.register_action("hello-world", { "tcp-req", "http-req" }, function(txn)
txn:Info("你好世界")
结束)
此示例代码用于 HAproxy 配置,如下所示:

前端 tcp_frt
模式tcp
tcp 请求内容 lua.hello-world

前端 http_frt
模式http
http-请求 lua.hello-world

core.register_converters(名称, 功能)
上下文: 身体

注册一个作为转换器执行的 Lua 函数。 所有注册的转换器都可以
在 HAProxy 中使用前缀“lua.”。 转换器获取一个字符串作为输入并
返回一个字符串作为输出。 注册的函数最多可以有 9 个值作为
范围。 所有的值都是字符串。

参数

· 姓名 (绳子) -- 是转换器的名称。

· FUNC (功能) -- 是调用作为转换器工作的 Lua 函数。

用作参数的 Lua 函数的原型是:

函数(str, [p1 [, p2 [, ... [, p5]]]])

· STR (绳子):这是自动转换为字符串的输入值。

· p1 .. p5 (绳子):这是在 haroxy 中声明的字符串参数列表
配置文件。 参数的数量不超过 5。顺序和
这些的性质通常由开发者选择。

core.register_fetches(名称, 功能)
上下文: 身体

注册作为样本提取执行的 Lua 函数。 所有注册的样本获取
可以在 HAProxy 中使用前缀“lua.”。 Lua 示例提取返回一个字符串
作为输出。 注册的函数最多可以接受 9 个值作为参数。 一切
值是字符串。

参数

· 姓名 (绳子) -- 是转换器的名称。

· FUNC (功能) -- 是调用的 Lua 函数作为样本提取工作。

用作参数的 Lua 函数的原型是:

字符串函数(txn, [p1 [, p2 [, ... [, p5]]]])

· TXN (TXN ):这是与当前请求关联的 txn 对象。

· p1 .. p5 (绳子):这是在 haroxy 中声明的字符串参数列表
配置文件。 参数的数量不超过 5。顺序和
这些的性质通常由开发者选择。

· 退货政策: 包含一些数据的字符串,如果现在无法返回值,则为 nil。

lua 示例代码:

core.register_fetches(“你好”,函数(txn)
回复“你好”
结束)
HAProxy 示例配置:

前端示例
http-request 重定向位置 /%[lua.hello]

core.register_service(名称, 模式, 功能)
上下文: 身体

注册一个作为服务执行的 Lua 函数。 所有注册的服务都可以
在 HAProxy 中使用前缀“lua.”。 服务获取对象类作为输入
根据需要的模式。

参数

· 姓名 (绳子) -- 是转换器的名称。

· 模式 (绳子) -- 是描述所需模式的字符串。 只有 'tcp' 或
'http' 是允许的。

· FUNC (功能) -- 是调用作为转换器工作的 Lua 函数。

用作参数的 Lua 函数的原型是:

功能(小程序)

· 小程序 小程序 将是一个 小程序TCP 或者 小程序HTTP . 这取决于类型
注册的小程序。 使用“http”值注册的小程序 模式
参数将得到一个 小程序HTTP 。 如果 模式 值为 'tcp',小程序将
得到了 小程序TCP .

警告: 不能从 'tcp- 调用类型为 'http' 的小程序' 规则集。 只有 'http-'
规则集被授权,这意味着不可能从一个 HTTP 小程序调用
tcp 模式下的代理。 可以从任何地方调用“tcp”类型的小程序。

这里是一个服务注册的例子。 该服务只是发送一个“Hello world”作为
http 响应。

core.register_service("hello-world", "http", function(applet)
本地响应 = "Hello World!"
小程序:设置状态(200)
小程序:add_header(“内容长度”,string.len(响应))
小程序:add_header(“内容类型”,“文本/纯文本”)
小程序:start_response()
小程序:发送(响应)
结束)
此示例代码用于 HAproxy 配置,如下所示:

前端示例
http-request 使用服务 lua.hello-world

core.register_init(函数)
上下文: 身体

注册一个在配置解析后执行的函数。 这对
检查任何参数。

参数

· FUNC (功能) -- 是作为初始化程序调用的 Lua 函数。

用作参数的 Lua 函数的原型是:

功能()
它不需要输入,也不需要输出。

core.register_task(函数)
上下文:主体、初始化、任务、动作、样本获取、转换器

注册并开始独立任务​​。 任务在 HAProxy main 时启动
调度程序启动。 例如,可以执行这种类型的任务来执行复杂的
健康检查。

参数

· FUNC (功能) -- 是作为初始化程序调用的 Lua 函数。

用作参数的 Lua 函数的原型是:

功能()
它不需要输入,也不需要输出。

core.set_nice(不错)
上下文: 任务、动作、采样、转换器

更改当前任务或当前会话的 nice。

参数

· 不错 (整数) -- nice 值,它必须在 -1024 和 1024 之间。

core.set_map(文件名, 键, 值)
上下文: 初始化、任务、动作、样本获取、转换器

设置值 折扣值 与密钥相关联 在引用的地图中 文件名.

参数

· 文件名 (绳子) -- 地图参考

· (绳子) -- 要设置或替换的键

· 折扣值 (绳子) -- 关联值

核心.睡眠(INT 秒)
上下文:主体,初始化,任务,动作

核心睡眠() 函数在指定秒之间停止 Lua 执行。

参数

· (整数) -- 所需的秒数。

核心.tcp()
上下文: 初始化,任务,动作

这个函数返回一个新的对象 插座 类。

退货政策
A 插座 目的。

core.done(数据)
上下文:主体、初始化、任务、动作、样本获取、转换器

参数

· data (任何) -- 为调用者返回一些数据。 它很有用
样本提取和样本转换器。

立即停止当前的 Lua 执行并返回给调用者
样本提取、转换器或操作并返回指定值(忽略
行动)。 当 LUA 进程完成其工作并想要给
在不执行剩余代码的情况下将控制权返回给 HAProxy。 它可以被视为
多层次的“回归”。

核心产量()
上下文: 任务、动作、采样、转换器

在 HAProxy 调度程序上交还手。 LUA处理时使用
消耗大量的处理时间。

获取()
此类包含许多内部 HAProxy 示例提取。 查看 HAProxy
“configuration.txt”文档了解更多关于她的用法的信息。 他们是
第 7.3.2 至 7.3.6 章。

警告 某些示例提取在某些上下文中不可用。 这些限制
当它们有用时在本文档中指定。

我们 TXN.f

我们 TXN.sf

提取可用于:

·获取系统时间,

· 获取环境变量,

·获取随机数,

· 已知的后端状态,如队列中的用户数或
建立的连接,

·客户端信息,如IP源或目的地,

·处理棍子桌,

· 建立SSL信息,

· HTTP 信息,如标头或方法。

功能动作(txn)
-- 获取源IP
本地客户端 IP = txn.f:src()
结束

转换器()
此类包含许多内部 HAProxy 示例转换器。 查看 HAProxy
文档“configuration.txt”了解更多关于她的用法的信息。 它的
第7.3.1章。

我们 TXN.c

我们 TXN文件

转换器提供有状态转换。 它们可用于:

· 将输入转换为 base64,

· 对输入字符串应用散列(djb2、crc32、sdbm、wt6),

· 格式化日期,

· json 转义,

· 提取首选语言比较两个列表,

· 转向低位或高位字符,

·处理棍子桌。

渠道()
HAProxy 使用两个缓冲区来处理请求。 第一个被使用
带有请求数据(从客户端到服务器),第二个用于
响应数据(从服务器到客户端)。

每个缓冲区包含两种类型的数据。 第一种是传入数据等待
为一个处理。 第二部分是已经处理的传出数据。 通常,
传入数据被处理,在它被标记为传出数据之后,最后它
已发送。 以下函数提供了用于以一种方式处理这些数据的工具
缓冲。

下图显示了应用通道类函数的位置。

警告: 无法从请求动作中的响应中读取,并且是
无法在响应操作中读取请求通道。
[图片]

频道.dup(频道)
此函数返回一个包含整个缓冲区的字符串。 数据不是
从缓冲区中删除,以后可以重新处理。

如果缓冲区无法接收更多数据,则返回“nil”值。

参数

· 渠道 (类_频道) -- 被操纵的通道。

退货政策
包含所有可用数据的字符串或 nil。

频道.get(频道)
此函数返回一个包含整个缓冲区的字符串。 数据被消耗
从缓冲区。

如果缓冲区无法接收更多数据,则返回“nil”值。

参数

· 渠道 (类_频道) -- 被操纵的通道。

退货政策
包含所有可用数据的字符串或 nil。

Channel.getline(通道)
此函数返回一个包含缓冲区第一行的字符串。 数据
被消耗。 如果返回的数据不包含最终的“n”,则其假定比其
缓冲区中的最后一个可用数据。

如果缓冲区无法接收更多数据,则返回“nil”值。

参数

· 渠道 (类_频道) -- 被操纵的通道。

退货政策
包含可用行或 nil 的字符串。

频道.set(频道, 字符串)
此函数用字符串替换缓冲区的内容。 函数返回
复制的长度,否则返回-1。

不发送具有此功能的数据集。 他们等待 HAProxy 的结束
处理,因此缓冲区可能已满。

参数

· 渠道 (类_频道) -- 被操纵的通道。

· 绳子 (绳子) -- 将要发送的数据。

退货政策
一个包含复制的字节数或 -1 的整数。

频道.追加(频道, 字符串)
此函数将字符串参数附加到缓冲区的内容。 功能
返回复制的长度,否则返回-1。

不发送具有此功能的数据集。 他们等待 HAProxy 的结束
处理,因此缓冲区可能已满。

参数

· 渠道 (类_频道) -- 被操纵的通道。

· 绳子 (绳子) -- 将要发送的数据。

退货政策
一个包含复制的字节数或 -1 的整数。

频道.发送(频道, 字符串)
此功能需要立即发送数据。 除非连接是
关闭,缓冲区会定期刷新,所有字符串都可以发送。

参数

· 渠道 (类_频道) -- 被操纵的通道。

· 绳子 (绳子) -- 将要发送的数据。

退货政策
一个包含复制的字节数或 -1 的整数。

Channel.get_in_length(通道)
此函数返回缓冲区输入部分的长度。

参数

· 渠道 (类_频道) -- 被操纵的通道。

退货政策
一个包含可用字节数的整数。

Channel.get_out_length(通道)
此函数返回缓冲区输出部分的长度。

参数

· 渠道 (类_频道) -- 被操纵的通道。

退货政策
一个包含可用字节数的整数。

频道.前向(频道, 整数)
此函数将字节从缓冲区的输入部分传输到输出部分。

参数

· 渠道 (类_频道) -- 被操纵的通道。

· INT (整数) -- 将要转发的数据量。

HTTP()
这个类包含所有的 HTTP 操作函数。

HTTP.req_get_headers(http)
返回一个包含所有请求标头的数组。

参数

· HTTP (类_http) -- 相关的 http 对象。

退货政策
标头数组。

我们 HTTP.res_get_headers()

这是返回数组的形式:

HTTP:req_get_headers()[' '][ ] = " ”

本地 hdr = HTTP:req_get_headers()
hdr["host"][0] = "www.test.com"
hdr["accept"][0] = "音频/基本 q=1"
hdr["accept"][1] = "audio/*, q=0.2"
hdr["accept"][2] = "*/*, q=0.1"

HTTP.res_get_headers(http)
返回一个包含所有响应头的数组。

参数

· HTTP (类_http) -- 相关的 http 对象。

退货政策
标头数组。

我们 HTTP.req_get_headers()

这是返回数组的形式:

HTTP:res_get_headers()[' '][ ] = " ”

本地 hdr = HTTP:req_get_headers()
hdr["host"][0] = "www.test.com"
hdr["accept"][0] = "音频/基本 q=1"
hdr["accept"][1] = "audio/*, q=0.2"
hdr["accept"][2] = "*.*, q=0.1"

HTTP.req_add_header(http, 名称, 值)
在请求中附加一个 HTTP 标头字段,其名称在“name”中指定,并且
其值在“值”中定义。

参数

· HTTP (类_http) -- 相关的 http 对象。

· 姓名 (绳子) -- 标题名称。

· 折扣值 (绳子) -- 标头值。

我们 HTTP.res_add_header()

HTTP.res_add_header(http, 名称, 值)
在响应中附加一个 HTTP 标头字段,其名称在“name”中指定,并且
其值在“值”中定义。

参数

· HTTP (类_http) -- 相关的 http 对象。

· 姓名 (绳子) -- 标题名称。

· 折扣值 (绳子) -- 标头值。

我们 HTTP.req_add_header()

HTTP.req_del_header(http, 名称)
删除名称在“name”中指定的请求中的所有 HTTP 标头字段。

参数

· HTTP (类_http) -- 相关的 http 对象。

· 姓名 (绳子) -- 标题名称。

我们 HTTP.res_del_header()

HTTP.res_del_header(http, 名称)
删除响应中名称在“name”中指定的所有 HTTP 标头字段。

参数

· HTTP (类_http) -- 相关的 http 对象。

· 姓名 (绳子) -- 标题名称。

我们 HTTP.req_del_header()

HTTP.req_set_header(http, 名称, 值)
此变量替换所有标题“名称”的所有出现,仅包含一个
价值”。

参数

· HTTP (类_http) -- 相关的 http 对象。

· 姓名 (绳子) -- 标题名称。

· 折扣值 (绳子) -- 标头值。

我们 HTTP.res_set_header()

此函数与以下代码执行相同的工作:

函数 fcn(txn)
TXN.http:req_del_header("header")
TXN.http:req_add_header("header", "value")
结束

HTTP.res_set_header(http, 名称, 值)
此变量替换所有标题“名称”的所有出现,仅包含一个
价值”。

参数

· HTTP (类_http) -- 相关的 http 对象。

· 姓名 (绳子) -- 标题名称。

· 折扣值 (绳子) -- 标头值。

我们 HTTP.req_rep_header()

HTTP.req_rep_header(http, 名称, 正则表达式, 代替)
根据标题字段“名称”的所有出现匹配正则表达式
到“regex”,并用“replace”参数替换它们。 替换值
可以包含反向引用,如 1, 2, ... 此函数适用于请求。

参数

· HTTP (类_http) -- 相关的 http 对象。

· 姓名 (绳子) -- 标题名称。

· 正则表达式 (绳子) -- 匹配正则表达式。

· 更换 (绳子) -- 替换值。

我们 HTTP.res_rep_header()

HTTP.res_rep_header(http, 名称, 正则表达式, 字符串)
根据标题字段“名称”的所有出现匹配正则表达式
到“regex”,并用“replace”参数替换它们。 替换值
可以包含反向引用,如 1, 2, ... 此函数适用于请求。

参数

· HTTP (类_http) -- 相关的 http 对象。

· 姓名 (绳子) -- 标题名称。

· 正则表达式 (绳子) -- 匹配正则表达式。

· 更换 (绳子) -- 替换值。

我们 HTTP.req_replace_header()

HTTP.req_replace_value(http, 名称, 正则表达式, 代替)
像“HTTP.req_replace_header()”一样工作,除了它匹配正则表达式
标题字段“名称”的每个逗号分隔值而不是整个
标头。

参数

· HTTP (类_http) -- 相关的 http 对象。

· 姓名 (绳子) -- 标题名称。

· 正则表达式 (绳子) -- 匹配正则表达式。

· 更换 (绳子) -- 替换值。

我们 HTTP.req_replace_header()

我们 HTTP.res_replace_value()

HTTP.res_replace_value(http, 名称, 正则表达式, 代替)
像“HTTP.res_replace_header()”一样工作,除了它匹配正则表达式
标题字段“名称”的每个逗号分隔值而不是整个
标头。

参数

· HTTP (类_http) -- 相关的 http 对象。

· 姓名 (绳子) -- 标题名称。

· 正则表达式 (绳子) -- 匹配正则表达式。

· 更换 (绳子) -- 替换值。

我们 HTTP.res_replace_header()

我们 HTTP.req_replace_value()

HTTP.req_set_method(http, 方法)
使用参数“method”重写请求方法。

参数

· HTTP (类_http) -- 相关的 http 对象。

· 方法 (绳子) -- 新方法。

HTTP.req_set_path(http, 路径)
使用“path”参数重写请求路径。

参数

· HTTP (类_http) -- 相关的 http 对象。

· (绳子) -- 新路径。

HTTP.req_set_query(http, 询问)
重写出现在第一个问号之后的请求的查询字符串
(“?”)与参数“查询”。

参数

· HTTP (类_http) -- 相关的 http 对象。

· 询问 (绳子) -- 新查询。

HTTP.req_set_uri(http, 乌里)
使用参数“uri”重写请求 URI。

参数

· HTTP (类_http) -- 相关的 http 对象。

· URI (绳子) -- 新的 uri。

HTTP.res_set_status(http, 地位)
使用参数“code”重写响应状态代码。 注意原因
自动适应新代码。

参数

· HTTP (类_http) -- 相关的 http 对象。

· 状态 (整数) -- 新的响应状态代码。

TXN()
txn 类包含所有与 http 或 tcp 事务相关的函数
(请注意,tcp 流与 tcp 事务相同,但 HTTP 事务
与 tcp 流不同)。

此类的使用允许从请求中检索数据,更改它并
转发它。

该类提供的所有功能都可以在上下文中使用
样本提取行动.

TXN.c

退货政策
An 转换器 .

该属性包含一个 Converters 类对象。

TXN文件

退货政策
An 转换器 .

该属性包含一个 Converters 类对象。 这个对象的功能
始终返回一个字符串。

TXN.f

退货政策
An 抓取 .

该属性包含一个 Fetches 类对象。

TXN.sf

退货政策
An 抓取 .

该属性包含一个 Fetches 类对象。 这个对象的功能
始终返回一个字符串。

发送请求

退货政策
An 渠道 .

该属性包含请求缓冲区的通道类对象。

TXN.res

退货政策
An 渠道 .

此属性包含响应缓冲区的通道类对象。

TXN.http

退货政策
An HTTP .

该属性包含一个 HTTP 类对象。 仅当代理具有
启用了“模式 http”。

TXN.log(TXN, 日志级别, 留言)
该函数发送日志。 发送日志,根据HAProxy
配置文件,在默认系统日志服务器上(如果已配置)和
如果允许,则为 stderr。

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

· 日志级别 (整数) -- 是与消息相关的日志级别。 它是一个
0 到 7 之间的数字。

· 味精 (绳子) -- 日志内容。

我们 core.emerg,core.alert,core.crit,core.err,core.warning,core.notice,
core.info、core.debug(日志级别定义)

我们 TXN.delog

我们 TXN调试

我们 TXN信息

我们 TXN.警告

我们 TXN.警报

TXN.delog(TXN, 留言)
发送与代理相关联的具有默认日志级别的日志行
交易。

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

· 味精 (绳子) -- 日志内容。

我们 TXN日志

TXN.调试(TXN, 留言)

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

· 味精 (绳子) -- 日志内容。

我们 TXN日志

做同样的工作:

功能调试(txn,味精)
TXN.log(txn, core.debug, msg)
结束

TXN.信息(TXN, 留言)

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

· 味精 (绳子) -- 日志内容。

我们 TXN日志

功能调试(txn,味精)
TXN.log(txn, core.info, msg)
结束

TXN.警告(TXN, 留言)

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

· 味精 (绳子) -- 日志内容。

我们 TXN日志

功能调试(txn,味精)
TXN.log(txn, core.warning, msg)
结束

TXN.Alert(TXN, 留言)

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

· 味精 (绳子) -- 日志内容。

我们 TXN日志

功能调试(txn,味精)
TXN.log(txn, core.alert, msg)
结束

TXN.get_priv(交易)
返回存储在当前事务中的 Lua 数据(带有 TXN.set_priv())
功能。 如果没有存储数据,则返回一个 nil 值。

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

退货政策
预先存储的不透明数据,如果没有可用数据,则为 nil。

TXN.set_priv(TXN, 数据)
将任何数据存储在当前 HAProxy 事务中。 这个动作取代了旧的
存储的数据。

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

· data (不透明) -- 交易中存储的数据。

TXN.set_var(TXN, var, 值)
将 Lua 类型转换为 HAProxy 类型并将其存储在变量中。

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

· VAR (绳子) -- HAProxy变量对应的变量名
语法。

· 折扣值 (不透明) -- 存储在变量中的数据。

TXN.get_var(TXN, 变量)
以 Lua 类型返回存储在变量转换器中的数据。

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

· VAR (绳子) -- HAProxy变量对应的变量名
语法。

TXN.get_headers(交易)
此函数返回一个标题数组。

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

退货政策
一组标题。

TXN.完成(交易)
该函数终止交易和相关会话的处理。
它可以在检测到严重错误时使用或在之后终止处理
一些数据已返回给客户端(例如:重定向)。

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

TXN.set_loglevel(txn, 日志级别)
用于更改当前请求的日志级别。 “日志级别”必须是
0 到 7 之间的整数。

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

· 日志级别 (整数) -- 所需的日志级别。 这个变量可以是以下之一

我们 核。

TXN.set_tos(TXN, 托)
用于设置发送到客户端的数据包的 TOS 或 DSCP 字段值到
在支持此功能的平台上传入“tos”的值。

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

· 咳嗽 (整数) -- 新的 TOS os DSCP。

TXN.set_mark(txn, 标记)
用于将所有发送到客户端的数据包上的 Netfilter MARK 设置为该值
在支持它的平台上传递“标记”。

参数

· TXN (类_txn) -- 包含数据的类 txn 对象。

· 标记 (整数) -- 标记值。

插座()
此类必须与 Lua Socket 类兼容。 只有“客户”
功能可用。 请参阅 Lua 套接字文档:

http://w3.impa.br/~diego/software/luasocket/tcp.html

套接字.close(套接字)
关闭一个 TCP 对象。 对象使用的内部套接字关闭,本地
对象绑定到的地址可供其他应用程序使用。 不
允许进一步的操作(除了进一步调用 close 方法)
关闭的套接字。

参数

· 插座 (类套接字) -- 是被操纵的 Socket。

注意:重要的是在不需要时关闭所有使用的套接字,因为在
许多系统,每个套接字使用一个文件描述符,这是有限的系统
资源。 垃圾收集对象在销毁前自动关闭,
虽然。

套接字.连接(套接字, 地址[, 港口])
尝试将套接字对象连接到远程主机。

如果出现错误,该方法返回 nil 后跟一个描述错误的字符串。
如果成功,该方法返回 1。

参数

· 插座 (类套接字) -- 是被操纵的 Socket。

· 地址 (绳子) -- 可以是 IP 地址或主机名。 见下文
更多信息。

· 端口 (整数) -- 必须是 [1..64K] 范围内的整数。

退货政策
1 或零。

地址字段扩展允许使用 connect() 函数连接到
除 TCP 之外的其他流。 包含 simpleipv4 或 ipv6 地址的语法是
基本上是预期的格式。 这种格式需要端口。

接受的其他格式是像“/socket/path”这样的套接字路径,它允许连接
到一个插座。 抽象命名空间支持前缀“abns@”,最后
可以使用前缀“fd@”传递文件描述符。 前缀“ipv4@”、“ipv6@”
和“unix@”也受支持。 端口可以​​通过字符串传递。 语法
“127.0.0.1:1234”是有效的。 在这种情况下,参数 端口 被忽略。

Socket.connect_ssl(套接字, 地址, 港口)
与函数 socket:connect 的行为相同,但使用 SSL。

参数

· 插座 (类套接字) -- 是被操纵的 Socket。

退货政策
1 或零。

Socket.getpeername(套接字)
返回有关连接的客户端对象的远程端的信息。

返回一个字符串,其中包含对等方的 IP 地址,后跟端口号
peer 用于连接。 如果出现错误,该方法返回 nil。

参数

· 插座 (类套接字) -- 是被操纵的 Socket。

退货政策
包含服务器信息的字符串。

Socket.getsockname(套接字)
返回与对象关联的本地地址信息。

该方法返回一个带有本地 IP 地址的字符串和一个带有端口的数字。 在
如果出现错误,该方法返回 nil。

参数

· 插座 (类套接字) -- 是被操纵的 Socket。

退货政策
包含客户端信息的字符串。

套接字.receive(套接字 [, 图案[, 字首]])
根据指定的读取模式从客户端对象读取数据。 图案
遵循 Lua 文件 I/O 格式,以及所有之间的性能差异
图案可以忽略不计。

参数

· 插座 (类套接字) -- 是被操纵的 Socket。

· 模式 (字符串|整数) -- 描述需要什么(见下文)。

· 字首 (绳子) -- 将作为返回数据前缀的字符串。

退货政策
包含所需数据或 nil 的字符串。

模式可以是以下任何一种:

·

`*a`: 插座 直到 地都 is 关闭。 没有
执行行尾翻译;

·

`*l`: a 线 of 文本 插座 线 is 终止 by a
LF 字符 (ASCII 10),可选地前面有一个 CR 字符 (ASCII 13)。
CR 和 LF 字符不包含在返回的行中。 实际上,
模式忽略所有 CR 字符。 这是默认模式。

·

数: 原因 方法 a 指定 of 字节
插座。 前缀是一个可选的字符串,要连接到开头
返回之前接收到的任何数据。

· 空的:如果模式留空,则默认选项为 *l.

如果成功,该方法返回接收到的模式。 出现错误时,
方法返回 nil 后跟一个错误消息,它可以是字符串 'closed'
如果在传输完成之前连接已关闭或字符串
'timeout' 以防操作期间超时。 此外,在错误之后
消息,该函数返回传输的部分结果。

重要提示:此功能发生了重大变化。 它曾经支持多个
模式(但我从未见过使用此功能),现在不再使用了。
过去部分结果的返回方式与成功结果的返回方式相同。 这个
最后一个功能违反了所有函数都应该在出错时返回 nil 的想法。 因此
它也被改变了。

套接字.发送(套接字, 数据[, 开始[, 结尾]])
通过客户端对象发送数据。

参数

· 插座 (类套接字) -- 是被操纵的 Socket。

· data (绳子) -- 将要发送的数据。

· 开始 (整数) -- 数据在缓冲区中的起始位置
被发送。

· 结束 (整数) -- 数据在缓冲区中的结束位置
发送。

退货政策
见下文。

数据是要发送的字符串。 可选参数 i 和 j 的工作方式与
标准 string.sub Lua 函数,允许选择要发送的子字符串。

如果成功,该方法返回 [start, end] 内最后一个字节的索引
已发送。 请注意,如果 start 为 1 或不存在,这实际上是
发送的总字节数。 如果出现错误,该方法返回 nil,然后是
一条错误消息,后跟 [start, end] 中最后一个字节的索引
已发送。 您可能想从后面的字节再试一次。 错误
如果连接在传输之前关闭,则消息可以“关闭”
已完成或字符串 'timeout' 以防在此期间出现超时
操作。

注意:输出没有缓冲。 对于小字符串,连接总是更好
它们在 Lua 中(使用 '..' 运算符)并在一次调用中发送结果而不是
多次调用该方法。

Socket.setoption(套接字, 选项[, 价值])
只是为了兼容性而实现的,这个 cal 什么都不做。

套接字.settimeout(套接字, 价值[, 模式])
更改对象的超时值。 所有 I/O 操作都是阻塞的。 那
也就是说,对方法 send、receive 和 accept 的任何调用都将无限期地阻塞,
直到操作完成。 settimeout 方法定义了数量限制
I/O 方法可以阻塞的时间。 当超时时间过去后,受影响的
方法放弃并失败并显示错误代码。

等待的时间量指定为 value 参数,以秒为单位。

超时模式是机器人实现的,唯一可设置的超时是不活动
等待完成内部缓冲区发送或等待接收数据的时间。

参数

· 插座 (类套接字) -- 是被操纵的 Socket。

· 折扣值 (整数) -- 超时值。

地图()
此类允许在 HAProxy 映射中进行一些查找。 声明的地图可以是
在运行时通过 HAProxy 管理套接字修改。

默认=“美国”

-- 创建和加载地图
geo = Map.new("geo.map", Map.ip);

-- 创建返回用户国家/地区的新提取
core.register_fetches(“国家”,函数(txn)
本地源代码;
本地位置;

src = txn.f:fhdr("x-forwarded-for");
如果 (src == nil) 那么
src = txn.f:src()
如果 (src == nil) 那么
返回默认值;
结束
结束

-- 执行查找
loc = geo:lookup(src);

如果 (loc == nil) 那么
返回默认值;
结束

返回位置;
结尾);

地图文件
请参阅 HAProxy configuration.txt 文件,“使用 ACL 和获取样本”一章
ans 子章节“ACL 基础”来了解这种模式匹配方法。

映射文件 请参阅 HAProxy configuration.txt 文件,“使用 ACL 和获取样本”一章
ans 子章节“ACL 基础”来了解这种模式匹配方法。

映射文件
请参阅 HAProxy configuration.txt 文件,“使用 ACL 和获取样本”一章
ans 子章节“ACL 基础”来了解这种模式匹配方法。

地图.beg
请参阅 HAProxy configuration.txt 文件,“使用 ACL 和获取样本”一章
ans 子章节“ACL 基础”来了解这种模式匹配方法。

地图.sub
请参阅 HAProxy configuration.txt 文件,“使用 ACL 和获取样本”一章
ans 子章节“ACL 基础”来了解这种模式匹配方法。

映射目录
请参阅 HAProxy configuration.txt 文件,“使用 ACL 和获取样本”一章
ans 子章节“ACL 基础”来了解这种模式匹配方法。

地图.dom
请参阅 HAProxy configuration.txt 文件,“使用 ACL 和获取样本”一章
ans 子章节“ACL 基础”来了解这种模式匹配方法。

地图端
请参阅 HAProxy configuration.txt 文件,“使用 ACL 和获取样本”一章
ans 子章节“ACL 基础”来了解这种模式匹配方法。

地图.reg
请参阅 HAProxy configuration.txt 文件,“使用 ACL 和获取样本”一章
ans 子章节“ACL 基础”来了解这种模式匹配方法。

Map.new(文件, 方法)
创建并加载地图。

参数

· 文件 (绳子) -- 是包含地图的文件。

· 方法 (整数) -- 是地图模式匹配方法。 查看属性
的地图类。

退货政策
一个类 Map 对象。

我们 地图属性。

Map.lookup(地图, str)
在地图中执行查找。

参数

· 地图 (类地图) -- 是类 Map 对象。

· STR (绳子) -- 是用作键的字符串。

退货政策
一个包含结果的字符串,如果不匹配则为 nil。

Map.slookup(地图, str)
在地图中执行查找。

参数

· 地图 (类地图) -- 是类 Map 对象。

· STR (绳子) -- 是用作键的字符串。

退货政策
包含结果的字符串,如果不匹配则为空字符串。

小程序HTTP()
此类与需要“http”模式的小程序一起使用。 http小程序可以
注册 core.register_service() 功能。 它们用于
像 HAProxy 后面的服务器一样处理 http 请求。

这是一个 hello world 示例代码:

core.register_service("hello-world", "http", function(applet)
本地响应 = "Hello World!"
小程序:设置状态(200)
小程序:add_header(“内容长度”,string.len(响应))
小程序:add_header(“内容类型”,“文本/纯文本”)
小程序:start_response()
小程序:发送(响应)
结束)

小程序HTTP.c

退货政策
A 转换器

该属性包含一个 Converters 类对象。

小程序HTTP.sc

退货政策
A 转换器

该属性包含一个 Converters 类对象。 这个对象的功能
始终返回一个字符串。

小程序HTTP文件

退货政策
A 抓取

该属性包含一个 Fetches 类对象。 注意小程序执行
place 无法访问有效的 HAProxy 核心 HTTP 事务,因此一些示例
与 HTTP 相关值(hdr、path、...)相关的 fecthes 不可用。

小程序HTTP.sf

退货政策
A 抓取

该属性包含一个 Fetches 类对象。 这个对象的功能
始终返回一个字符串。 注意小程序执行的地方不能访问一个
有效的 HAProxy 核心 HTTP 事务,因此一些与 HTTP 相关的示例文件
依赖值(hdr、path、...)不可用。

AppletHTTP.方法

退货政策
绳子

属性方法返回一个包含 HTTP 方法的字符串。

小程序HTTP.version

退货政策
绳子

属性版本,返回一个包含 HTTP 请求版本的字符串。

小程序HTTP.path

退货政策
绳子

属性路径返回一个包含 HTTP 请求路径的字符串。

小程序HTTP.qs

退货政策
绳子

属性 qs 返回一个包含 HTTP 请求查询字符串的字符串。

AppletHTTP.length

退货政策
整数

属性长度返回一个包含 HTTP 正文长度的整数。

AppletHTTP.headers

退货政策
排列

属性 headers 返回一个包含 HTTP 标头的数组。 标题
名称总是小写。 由于标题名称可以遇到多个
在每个请求中,该值以 0 作为第一个索引值进行索引。 数组
有这个表格:

AppletHTTP.headers[' '][ ] = " ”

AppletHTTP.headers["host"][0] = "www.test.com"
AppletHTTP.headers["accept"][0] = "audio/basic q=1"
AppletHTTP.headers["accept"][1] = "audio/*, q=0.2"
AppletHTTP.headers["accept"][2] = "*/*, q=0.1"

AppletHTTP.headers
包含一个包含所有请求标头的数组。

AppletHTTP.set_status(小程序, 码)
此函数设置响应的 HTTP 状态代码。 允许的代码来自
100 599来。

参数

· 小程序 (类_AppletHTTP) - 一个 小程序HTTP

· (整数) -- 返回给客户端的状态码。

AppletHTTP.add_header(小程序, 名称, 值)
此函数在响应中添加一个标头。 重复的标题不会折叠。
特殊标题 内容长度 用于确定响应长度。 如果它
不存在,一个 传输编码: 分块 已设置,并且所有来自函数的写入
AppletHTTP:发送() 变成一块。

参数

· 小程序 (类_AppletHTTP) - 一个 小程序HTTP

· 姓名 (绳子) -- 标题名称

· 折扣值 (绳子) -- 标头值

AppletHTTP.start_response(小程序)
该函数向 HTTP 引擎表明它可以处理和发送
响应头。 在此调用之后,我们无法向响应添加标头; 我们
不能使用 AppletHTTP:发送() 函数如果 AppletHTTP:start_response() 是不是
叫。

参数

· 小程序 (类_AppletHTTP) - 一个 小程序HTTP

AppletHTTP.getline(小程序)
此函数返回一个字符串,其中包含 http 正文中的一行。 如果数据
返回的不包含最终的 '\n' 它假定比它的最后一个可用数据
在流结束之前。

参数

· 小程序 (类_AppletHTTP) - 一个 小程序HTTP

退货政策
一个字符串。 如果到达流的末尾,字符串可以为空。

AppletHTTP.receive(小程序[, 尺寸])
根据指定的读取从 HTTP 正文读取数据 尺寸。 如果 尺寸 is
丢失,该函数尝试读取流的所有内容直到结束。 如果
尺寸 大于 http 主体,它返回可用的数据量。

参数

· 小程序 (类_AppletHTTP) - 一个 小程序HTTP

· 尺寸 (整数) -- 所需的读取大小。

退货政策
总是返回一个字符串,该字符串可以为空是连接关闭。

小程序HTTP.send(小程序, 留言)
发送消息 味精 在 http 请求正文上。

参数

· 小程序 (类_AppletHTTP) - 一个 小程序HTTP

· 味精 (绳子) -- 要发送的消息。

小程序TCP()
此类与需要“tcp”模式的小程序一起使用。 tcp小程序可以是
注册 core.register_service() 功能。 它们用于处理
像 HAProxy 后面的服务器一样的 tcp 流。

小程序TCP.c

退货政策
A 转换器

该属性包含一个 Converters 类对象。

小程序TCP.sc

退货政策
A 转换器

该属性包含一个 Converters 类对象。 这个对象的功能
始终返回一个字符串。

小程序TCP.f

退货政策
A 抓取

该属性包含一个 Fetches 类对象。

小程序TCP.sf

退货政策
A 抓取

该属性包含一个 Fetches 类对象。

AppletTCP.getline(小程序)
此函数返回一个包含流中一行的字符串。 如果数据
返回的不包含最终的 '\n' 它假定比它的最后一个可用数据
在流结束之前。

参数

· 小程序 (class_AppletTCP) - 一个 小程序TCP

退货政策
一个字符串。 如果到达流的末尾,字符串可以为空。

AppletTCP.receive(小程序[, 尺寸])
从 TCP 流中读取数据,根据指定的读取 尺寸。 如果 尺寸
丢失,该函数尝试读取流的所有内容直到结束。

参数

· 小程序 (class_AppletTCP) - 一个 小程序TCP

· 尺寸 (整数) -- 所需的读取大小。

退货政策
总是返回一个字符串,该字符串可以为空是连接关闭。

AppletTCP.发送(appletmsg)
在流上发送消息。

参数

· 小程序 (class_AppletTCP) - 一个 小程序TCP

· 味精 (绳子) -- 要发送的消息。

可以在这里找到很多有用的 lua 库:

· https://lua-toolbox.com/

Redis访问:

· https://github.com/nrk/redis-lua

这是一个关于 Redis 库与 HAProxy 的使用示例。 注意每次调用
如果套接字连接失败,则此库的任何函数都可能引发错误。

-- 加载redis库
本地 redis = require("redis");

函数 do_something(txn)

-- 创建并连接新的 tcp 套接字
本地 tcp = core.tcp();
TCP:设置超时(1);
tcp:connect("127.0.0.1", 6379);

-- 使用带有这个新套接字的 redis 库
本地客户端 = redis.connect({socket=tcp});
客户端:ping();

结束

开放式SSL:

· http://mkottman.github.io/luacrypto/index.html

· https://github.com/brunoos/luasec/wiki

使用 onworks.net 服务在线使用 haproxy-lua


免费服务器和工作站

下载 Windows 和 Linux 应用程序

  • 1
    ZABBIX
    ZABBIX
    Zabbix 是企业级开放
    源分布式监控解决方案
    旨在监控和跟踪
    网络的性能和可用性
    服务器、设备...
    下载 Zabbix
  • 2
    KDiff3
    KDiff3
    此存储库不再维护
    并用于存档目的。 看
    https://invent.kde.org/sdk/kdiff3 for
    最新的代码和
    https://download.kde.o...
    下载 KDiff3
  • 3
    USB加载器GX
    USB加载器GX
    USBLoaderGX 是一个 GUI
    Waninkoko 的 USB Loader,基于
    libwiigui。 它允许上市和
    推出 Wii 游戏、Gamecube 游戏和
    Wii 和 WiiU 上的自制软件...
    下载 USBLoaderGX
  • 4
    火鸟
    火鸟
    Firebird RDBMS 提供 ANSI SQL 特性
    & 在 Linux、Windows 上运行 &
    几个 Unix 平台。 特征
    出色的并发性和性能
    & 力量...
    下载火鸟
  • 5
    KompoZer首
    KompoZer首
    KompoZer 是一个所见即所得的 HTML 编辑器,使用
    Mozilla Composer 代码库。 作为
    Nvu 的开发已停止
    2005 年,KompoZer 修复了许多错误和
    增加了一个...
    下载 KompoZer
  • 6
    免费漫画下载器
    免费漫画下载器
    免费漫画下载器 (FMD) 是一个
    编写的开源应用程序
    Object-Pascal 用于管理和
    从各种网站下载漫画。
    这是一个镜...
    下载免费漫画下载器
  • 更多 ”

Linux 命令

Ad