问题标签 [mod-lua]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1556 浏览

mysql - xampp - 如何为 MySQL 定义驱动程序?

我一直在尝试使用mod_lua dbacquire 函数来操作一个示例mysql 数据库...

我在 httpd.conf 文件中取消了启用 mod_dbd 所需的注释。目前,我不断收到给定示例的此错误:

无法连接到数据库:找不到 mysql 的驱动程序

我看到有人说要把它放在 httpd.conf 文件中:

(是的,我确实更改了参数。)

当我将它添加到 httpd.conf 文件时,它会导致 XAMPP 出错并且不会启动 apache localhost。我把它缩小到它是 DBDriver 函数 - 因为它只有在包含它时才会出错。

0 投票
1 回答
136 浏览

apache - Apache HTTPD mod_lua parseargs 多值表不存储所有值

我目前正在编写一个测试工具,它使用带有 LUA 脚本的 httpd 引入延迟、失败和代理。这包括解析可能包含同一标签的多个值的查询字符串,即:

然后,这允许消息在消息流中的特定点延迟或将某些请求重定向到替代端点。我的问题来自提供的 LUA 表中可用的内容。

我遇到的问题是,当使用类似下面的代码和上面的查询字符串来简单地注销它正在使用的值时:

记录的唯一项目是与提供的最终参考值相关的项目:

正如我们所看到的,在第一个日志条目中,它知道 ref 的值是一个表,但是当迭代该表时,只返回一个带有最后一个值的条目。此外,标准表也只包括提供的最终值,但不确定这里应该是什么并且不感兴趣。

我相信我正在遵循 mod_lua文档中概述的 parseargs 的正确程序,就我的功能而言,这与我的期望相呼应,但没有给出如何处理多值部分的示例。

我只是假设它与任何其他表一样工作,其中多值的键是增量整数。

还有其他方法我应该通过多值表获取 ref 吗?

环境细节

服务器硬件 - Oracle VirtualBox 5.1.16 r113841(2gb RAM,2 核 CPU,32gb 硬盘)。

服务器操作系统 - Ubuntu 16.04.2 LTS(GNU/Linux 4.4.0-78-generic x86_64)。

Apache httpd 版本 - 服务器版本:Apache/2.4.18 (Ubuntu),服务器构建时间:2017-05-05T16:32:00。使用 ubuntu 规范 repo 安装。

Web 客户端 - 随您选择,不依赖于客户端(curl、wget、firefox 44、chrome、jmeter)

更多信息

在查询字符串中包含不同的标签会导致所有标签都被处理,但同样,只有每个标签的最后一个值被存储。请求参数:

仅记录以下内容:

另外我知道我不应该使用 r:err 但它降低了 apache 安装的日志记录级别,我无法更改它,所以 err 确保我得到了日志。

apache2 加载了以下模块:

0 投票
0 回答
119 浏览

apache - Apache 2.4 + mod_lua:请求之间共享状态

想象一下,您想基于mod_lua为 Apache 2.4 编写自己的速率限制器。这个想法是限制每个 IP 的每个时间间隔的请求。

对于此任务,您需要维护一个全局可访问的数据结构,其中包含例如每个 IP 先前请求的计数。

mod_lua 类型支持使用ivm_setivm_get方法的请求之间的共享内存,但仅在一个工作进程内:

值...存储在每个进程的基础上(因此它们不会对 prefork mpm 有多大好处)

通常您使用多个工作进程。在我们的例子中,我们将 mod_mpm_event 与几个进程一起使用。在这种情况下,您将如何共享这个小的“先前请求”数据结构?

我目前能想到的唯一方法是使用 mod_lua 支持的数据库。然而,对于这样一个简单的任务,它似乎是一个相当复杂的解决方案。

问题:如何在 mod_lua 中实现所有请求之间的共享内存?

PS:我知道有像mod_qos这样的现有速率限制器。我们的实际用例是不同的,但速率限制器示例有助于达成共识。

0 投票
1 回答
42 浏览

apache - 未找到符号:加载 mod_lua 时的 _ap_lua_init_mutex

我通过 Homebrew 安装了 Apache httpd 服务器。我尝试mod_lua通过运行编译

但是 httpd 无法以错误开始

无法将 /usr/local/lib/httpd/modules/mod_lua.so 加载到服务器中:dlopen(/usr/local/lib/httpd/modules/mod_lua.so,10):找不到符号:_ap_lua_init_mutex\n 引用自:/ usr/local/lib/httpd/modules/mod_lua.so\n 预期在:平面命名空间\n 在 /usr/local/lib/httpd/modules/mod_lua.so

上面的错误是什么意思?

0 投票
1 回答
72 浏览

apache - 从uri模式确定变量(Apache)

实际上,我们正在使用 Apache 网络服务器来托管我们的 REST-API。脚本是用 Lua 编写的,并使用 mod-lua 映射。

例如,来自的实际片段httpd.conf

所以 RequestGET https://xxx/restapi/v001/articles被映射到 script /opt/http/htdocs/restscripts/v001/articles.lua

好吧,我希望你能真正关注我。现在我们必须用模块扩展我们的 API,但请求 uri 必须相同。是否有机会确定模块名称并将其写入变量?


示例 - 脚本路径:

lua 脚本是独一无二的。

示例 - 请求:

httpd.conf 应该是这样的:

我已经阅读了以下问题,但这些变量并不依赖于 uri。

请告诉我,如果您需要任何进一步的信息。谢谢

0 投票
1 回答
29 浏览

apache - 在 Solaris 服务器上构建 Apache2 时出错

我正在 Solaris 服务器上构建 Apache2 (ver - 2.4.41)。

出现以下错误:

0 投票
0 回答
39 浏览

apache - 修补 REST API 资源的机会,无需 HTTP PATCH

给出以下情况:

  • 操作系统:RHEL 6/7/8
  • 使用带有 mod-lua 的 Apache 作为 REST API 服务器
  • 客户端点结构:
    • GET /customers: 列出客户
    • POST /customers: 创建新客户
    • GET /customers/$id: 按 id 列出客户

因此,在实施特定修补客户的机会时,我们正在运行以下问题。正确的方法(也是我们尝试的第一种方法)是使用HTTP PATCH 方法。不幸的是 Apache mod-lua 有一个错误,PATCH 方法没有正确实现(不提供请求正文)。该错误在此处进行跟踪。

但是我们必须提供此功能,PUT /customers由于结果值很多,因此无法对客户 ( ) 进行完整更新。

有没有人知道使用POSTor的好方法PUT?也许像PUT /customers/patch什么?谢谢。

0 投票
0 回答
37 浏览

apache - apache 2.4 中 mod_lua 中的 TCP 超时设置

mod_proxy 中的 ProxyPass 指令中有一个 TCP 连接超时设置。(例如connectiontimeout=5 timeout=30

参考。https://httpd.apache.org/docs/2.4/en/mod/mod_proxy.html#workers

但是mod_lua中有这样的TCP超时习语吗?(或者我们如何使用 mod_proxy + mod_lua 分别设置 TCP 连接超时和后端执行超时。)

我查看了官方文档,但找不到。 https://httpd.apache.org/docs/current/mod/mod_lua.html

0 投票
0 回答
34 浏览

apache - 在 Apache mod_lua CentOS 7 中使用 LuaOutputFilter 时的响应正文大小

我一直在努力解决在 Apache 配置中使用过滤器的问题。使用的服务器运行 CentOS 7。可用的 Apache 版本是 2.4.6

我已经使用文档中的示例进行了很多测试。像这样:

这工作正常。但是有一个问题:这个过滤器从输出中删除了几行,因此发送给客户端的内容大小不正确。似乎内容长度没有改变,并且在输出中附加了一些不需要的字符。在使用较新 Apache 版本的实验室环境中尝试此操作时,它可以正常工作。

我在尝试寻找解决方案时发现了这一点:

mod_lua:在运行我的 mod_filter 时,将 LuaOutputFilter 脚本注册为默认更改内容和内容长度。以前,增长或缩小以 Content-Length 集开始的响应需要 mod_filter 和 FilterProtocol change=yes。[Eric Covener] 注意:2.4.7 更改中不存在

我已经尝试了很多,但无法使其工作。我也尝试通过使用本机 Apache mod_substitute 来解决这个问题,但它不起作用,因为我试图删除的内容分布在多行以响应来自服务器的响应。

我的问题是:是否可以使用我的配置来完成这项工作?CentOS 7 ,来自 repo 的 Apache 2.4.6 与最新更新?此时升级服务器不是一种选择。

谢谢你。

0 投票
0 回答
25 浏览

apache - 如何找到通过 Apache 发出消息的脚本?(lua脚本)

源数据是这样的。有一个带有 Apache2 服务器和 lua 脚本的容器。我进入容器,做:

作为回应,我得到:

这些是我更正的“Invalid Layer 2”和“Invalid Layer 3”的行。原来有“无效层”。然后我向 Web 服务器发出请求,作为响应,我得到:“Invalid Layer”(我观看了与 wireshark 的交换)。

此外,我假设脚本缓存在某处。根据https://httpd.apache.org/docs/current/mod/mod_lua.html我在每个脚本旁边放了一个 .htaccess 文件,内容如下:

httpd 重新启动。docker 容器也重新启动。没有变化。

如何找到“无效层”消息的来源?是什么产生它?我以前没有使用过lua。