Articles of lua

如何在lua中parsingjson?

有没有任何轻量级的,最好是纯粹的lua,lua库来parsingjson的内容? 基本上我想用一个lua模块来扩充我的ngnix,它需要从我从Redis获得的json对象中获得一些信息。 该对象如下所示: { "data": { "user": { "username": "username", "type": "TYPE" } }, "passport": { "user": "uuid" }, } 在我的lua代码中,我需要validationdata.user.username存在。 然后我可以让nginx继续redirect。 任何人都可以给我一个例子,我怎么能实现呢?

Lua模块inheritance

在Lua中需要你的模块inheritance帮助。 假设我有两个模块: 第一个是“Parent”,它定义了一个名为“port”的字段和一个使用port和domain字段连接某个服务的方法“connect”。 我想在Child模块中定义第二个字段(域),而不是在父类中。 或者至less要通过子模块覆盖此字段。 module('Parent', package.seeall) port = 1234 function connect() ngx.say("connecting to "..domain..":"..port.."\n") end 请注意,“ 域 ”variables在这里没有定义 ! 现在让我们看看第二个,这是“孩子”: local base = _G module('Child', package.seeall) local Parent = base.require('Parent') base.setmetatable(Child, { __index = Parent }) domain = '127.0.0.1' 而这里主要的lua代码创build子实例: local Child = require "Child" Child.connect() 问题是,在Child模块中定义的variables对于父模块中定义的方法是不可见的。我需要改变这种行为让Parent例程代码看到在Child模块中定义的variables。这可能吗? 我可以以某种方式将孩子的名字空间复制到父模块吗?

如何检查nginx中的POST正文(HttpLuaModule)

我的目标是检查POST请求的主体,并将其与nginx上的一些键值对进行比较。 在我的情况下,POST请求将始终采用JSON格式。 每个请求将包含一个如下所示的key:value对: "transaction":"12345"或"transaction":"098765" 。 意味着关键的“交易”将永远存在,价值将会改变一段时间。 我正在考虑使用lua-nginx模块来检查一个post主体,并比较它与key-value从我们说memcached 。 我还没有任何代码显示,但是我很快就会尝试更新一个问题。 我想知道如果有人能帮助我开始,用这个或显示如何可以完成。

意外的正则expression式结果使用点符号

我试图检测文件格式:例如23.ts 如果我使用string.match( entities[3], 'ts$' ) — returns ts 如果我使用string.match( entities[3], '\.ts$' ) –returns error 如果我使用string.match( entities[3], '\\.ts$' ) –returns nil 如果我使用string.match( entities[3], '[\\.]{1}ts$' ) –returns nil 如果我使用string.match( entities[3], '.ts$' ) –works 所有string像ats,bts,cts …为什么? 我如何检测. 符号?

在Nginx中向Redis添加一个键/值

我想与nginx的redis进行通信,以便在列表中存储哪些请求是在图像上进行的,特别是在未在另一台服务器上进行代理的图像上。 我安装了OpenResty,以便使用redis2_query和redis2_pass命令。 这是我的nginxconfiguration: location ~* \.(jpg|jpeg|gif|png)$ { try_files $uri @imagenotfound; redis2_query lpush founds $uri; redis2_pass 127.0.0.1:6379; } location @imagenotfound { proxy_pass http://imgdomain.com/$uri; proxy_set_header Host imgdomain.com; proxy_set_header Server imgdomain.com; redis2_query lpush notfounds $uri; redis2_pass 127.0.0.1:6379; } 我做的每一个请求都返回一个整数,而且据我所知, redis2_pass返回查询的结果。 反正有没有返回这个结果,只是执行查询? 如果我删除了redis2_query和redis2_pass ,图像显示正确。 在此先感谢您的帮助!

如何通过nginx上的LUA将POST和GET传递给脚本?

我试图在nginx中创build一个webhook,将POST和GETvariables传递给bash脚本。 到目前为止,我已经得到了以下的工作: location /webhook { if ($request_method != POST) { return 405; } content_by_lua 'os.execute("/opt/bin/webhook.sh arg1 arg2")'; } 但是,我不知道如何通过POST和GET参数。 我在网上search,唯一可以find的是使用os.execute而无需参数或请求主体的一些详细使用,假设用户已经理解您可以使用LUA做的所有事情。 任何指导如何做到这一点? 谢谢!

如何在身份validation后将其redirect回主页

我想在NGINX服务器上configurationlua-resty-openidc 。 用户通过身份validation后,如何redirect回主页? 当用户通过validation时,callbackurl从服务器获取代码,session_state和其他参数。 一旦用户通过身份validation,加载就会出现问题。 用户返回的url是http://xyz.abc.com:8080/secured?code=32edkew2kjjjdf https://github.com/pingidentity/lua-resty-openidc 我的configuration如下所示。 我想把用户带回http://xyz.abc.com:8080 。 什么应该是redirect_uri? local opts = { — the full redirect URI must be protected by this script and becomes: — ngx.var.scheme.."://"..ngx.var.http_host..opts.redirect_uri_path redirect_uri_path = "/secured", discovery = "https://accounts.google.com/.well-known/openid-configuration", client_id = "<client_id", client_secret = "<client_secret" –authorization_params = { hd="pingidentity.com" }, –scope = "openid email profile", –iat_slack = 600, […]

OpenResty:configurationlua已经给了/etc/nginx/nginx.conf文件

我有一个在nginx上工作的网站。 nginx conf文件位于/etc/nginx.conf文件夹中。 现在我想把lua整合到这个项目中,所以我安装了Openresty。 我按照doc中的说明创build了一个名为“work”的文件夹,并且按照说明,网站在8080端口正常工作。 现在我想在我的/etc/nginx/nginx.conf文件中使用相同的代码。 就像我可以在那里使用'content_by_lua'这样的语句。 我无法configuration这个。 我得到以下错误。 在/etc/nginx/nginx.conf中启动nginx:nginx:[emerg]未知指令“content_by_lua”:25 nginx:configuration文件/etc/nginx/nginx.conftesting失败 让我知道我做错了什么

在使用Openresty时创build与redis的连接到nginx.conf文件中的db值

我正在使用Redis Django项目运行在nginx上,我正在通过代码创build连接 red = Redis.Redis(“localhost”,port = 6397,db = 5,socket_timeout = 2) 现在通过使用Openresty,我正在使用lua从Redis获取caching数据到nginx.conf文件中,我可以创build连接 本地redis =需要“resty.redis” 本地红= redis:new() 红色:set_timeout(1000) – 1秒 本地ok,err = red:connect(“10.0.0.161”,6379) 在nginx.conf文件中,我无法理解如何定义db值。 我尝试local ok, err = red:connect("10.0.0.161", 6379, {db=5)但它不工作。 请帮帮我。

使用Nginx / Lua检测并重写HTTP基本用户/密码标头到自定义标头中

我正在使用一个历史悠久的API,通过一个密钥/秘密组合来授予访问权限,原始APIdevise者应该将其作为用户名和密码在HTTP基本身份validation标头中传递,例如: curl -u api_key:api_secret http://api.example.com/…. 现在我们的API客户端将会不断增长,我们正在寻求使用3scale来处理身份validation,速率限制和其他function。 根据3scale的指示和build议,我们将在我们的API服务器前使用一个Nginx代理,这个代理使用3scale的服务来处理所有的访问控制系统。 我们将把我们现有的客户的密钥和秘密导出到3scale并保持两个系统同步。 我们需要我们现有的应用程序继续以现有的方式接收密钥和秘密,因为一些返回的数据是客户特定的。 但是,我需要find一种方法,将HTTP基本身份validation请求转换为重写的自定义头文件,而3scale本身不支持将其作为身份validation方法。 我已经能够使用3scale为你configuration的Nginx和Luaconfiguration设置代理。 这允许-u key:secret被传递给我们的服务器,并被正确处理。 目前,我需要另外添加相同的authentication信息作为查询参数或自定义标题,以便3scale可以pipe理访问。 我希望我的Nginx代理为我处理,以便用户以预先存在的方式提供一组authentication详细信息,3scale也可以提取。 在我知道的语言中,例如Ruby,我可以解码HTTP_AUTHORIZATION标头,selectBase64编码的部分,并解码它以find已经提供的密钥和秘密组件。 但是我是一个Nginx的新手,不知道如何在Nginx中实现同样的function(我也不知道3scale提供的Lua脚本是否可以成为解决scheme的一部分)…