docker单元测试设置
我想为我的产品设置单元测试环境.我在LUA的NGINX上建立了一个Web应用程序,该应用程序使用MySQL和Redis. 我认为,尽管我是Docker的新手,但Docker会很好.我的应用程序在CentOS服务器(生产服务器)上运行. 我打算在我的Mac(我的开发机器是Mac)或VM中对MySQL,Redis和WebApp设置不同的容器,然后编写UT应用程序(使用Busted Framework的LUA测试)进行测试. UT应用程序将与Docker Container Nginx进行对话,而Nginx将使用容器MySQL和Redis.这个好吗 ?如果是,有人可以指导我如何做到这一点吗?也许有一些好链接?如果没有,那可能是更好的方法.我已经尝试使用流浪汉,但是在我的情况下,这花了太多时间. 解决方案 以示例为例,我们如何设置项目模板,您可能会查看我们正在使用dockerized gitlab 安装自定义跑步者,能够执行docker-compose. 注意!跑步者本身正在
6 2023-11-07
编程技术问答社区
Lua-变量(对)转义特殊字符的衔接-Openresty Nginx
我不使用lua,但需要按照链接中提供的开放式(nginx)使用它. Openresty具有LUA模块 我设法正确安装和运行了OpenRestys nginx版本,网站工作. this 答案显示如何将标头串入字符串$request_headers: set_by_lua $request_headers ' local h = ngx.req.get_headers() local request_headers_all = "" for k, v in pairs(h) do request_headers_all = request_headers_all .. "["..k..": "..v..\n"]" end return request_headers_all '; 我将格式从上面的lua函数中从""..k..": "..v..";"更改为"["..k..": "..v.."]". 日志格式: log_format
4 2023-10-03
编程技术问答社区
如何避免lua中没有全局变量的循环依赖?
我正在使用开放式,我的应用程序设置为: app/ clients/ photoClient.lua init.lua auth.lua 假设photoClient既有一个未经身份验证的端点,也有一个身份验证的端点(类似于无需登录即可访问的头像端点,但是您可能需要首先登录的私人照片) ) 所以就依赖关系而言,我有: -- auth.lua local photoClient = require('app.clients.photoClient') -- this is used to show avatar on the login page local auth = {} auth.isAuthenticated = function () -- logic to check authentication end return auth 客户是 -- photoClient.lua local auth = r
36 2023-08-08
编程技术问答社区
如何在openresty lua中用第一个字节的内容向后端发送tcp请求
我已经使用一台TCP服务器和两个后端开始了开放式. TCP服务器根据TCP流的内容向后端派遣请求.以下是开放性配置的示例: stream { # define a TCP server listening on the port 1234: upstream backend1 { server 172.17.0.1:8081; } upstream backend2 { server 172.17.0.1:8082; } server { listen 1234; content_by_lua_block { local sock = ngx.req.socket( true ) -- reveive first byte local data, err = sock:receive( 1 ) --dispatch two backend1 if data is gre
12 2023-07-14
编程技术问答社区
NGINX通过JWT令牌的解码值进行速率限制
我有一个有关限制nginx速率的问题. 是否可以根据JWT令牌的解码值进行速率限制?我找不到文档中的任何信息. ,即使有一种通过创建纯自定义变量(使用luajit)来进行速率限制的方法,该变量将以我的解码JWT的值分配 - 也将完成这项工作. 问题是limit_req模块似乎在请求到达Luajit阶段之前已经执行了方式,因此它已经为时已晚! 将不胜感激. 解决方案 您可能知道,速率限制是通过唯一的IP地址应用的,以获得最佳结果,您应该使用唯一的JWT值或令牌限制. 您可以遵循这三种方法 方法 您可以直接在limit_req_zone中使用JWT令牌. http { ... limit_req_zone $http_authorization zone=req_zone:10m rate=5r/s; } conf.d/default.conf server { listen 80; li
52 2023-06-26
编程技术问答社区
为什么resty.redis不能与ngx.timer一起工作?
我已经问过给定此代码: local redis = require('resty.redis') local client = redis:new() client:connect(host,port) ngx.thread.spawn(function() ngx.say(ngx.time(),' ',#client:keys('*')) end) ngx.timer.at(2,function() ngx.say(ngx.time(),' ',#client:keys('*')) end) 我得到此错误: ---urhcdhw2pqoz--- 1611628086 5 2021/01/26 10:28:08 [error] 4902#24159: *4 lua entry thread aborted: runtime error: ...local/Cellar/openresty/1.19.3.1_1/lualib/resty/redis.lua:349
8 2023-06-20
编程技术问答社区
如何解决nginx在gzip压缩时弱的etags转换问题
我正在尝试使用nginx中的GZIP来压缩某些端点的响应体.问题在于NGINX将上游应用程序产生的ETAG标记为弱(以" W/"为前缀).上游应用程序还没有弱ETAG支持(春季版本 我正在尝试两个选项: 当上游服务器发送强烈的ETAG并将其修改为弱的服务器时,请尝试Nginx Lua API将其修改为强. 当客户寄回弱ETAG时,剥离弱ETAG标识符(" W/")并将请求转发到应用程序. 我必须在我无法实现的nginx config和lua api使用中做错了什么.此问题是关于选项1. nginx配置: location /test/compression { proxy_pass http://upstream_server:8080/someapi; proxy_redirect default; proxy_set_header X-Real-IP
30 2023-06-20
编程技术问答社区
香港-验证上游的ssl(ssl_proxy开启)。
我成功地安装了Kong Gateway的API,该API通过上游加载到多个目标(应用程序服务器). 现在,我有一个用于应用程序服务器的自签名证书,SSL握手应在Kong和Targets之间失败.我推论一下,孔没有验证上游证书. 经过一些研究,我发现了ssl_proxy on; nginx的配置,可以做对了. 我想在开放式上找到相当于opentresty的同等用品,以验证上游SSL证书. 该解决方案可能是修改Kong Nginx配置以激活ssl_proxy,但在同一实例上与不同的目标crop. 解决方案 我希望您以相反的方式进行:让您的后端服务确认Kong在与您的服务联系时具有特定的SSL证书,以便实际上只有Kong可以连接到服务,并且因此,任何API客户都必须通过Kong进行连接. 我们为wicked.haufe.io做到了这一点,使用了kong 0.11.0,您可以在这里找到合适的nginx_conf.lua文件: https://github.c
8 2023-06-20
编程技术问答社区
如何在nginx上行请求前在LUA代码中设置代理_http_version?
我想以编程方式更改LUA代码中的代理HTTP版本.有什么办法? 是的,我知道我们可以通过位置/服务器块中的 nginx config 文件设置它.有什么办法可以使用Lua Dymim Aneptions进行操作? 解决方案 更新14.10.2020 location / { content_by_lua_block { -- some logic here if flag then return ngx.exec("@http1_0") end return ngx.exec("@http1_1") } } location @http1_0 { proxy_pass ...; proxy_http_version 1.0; ... } location @http1_1 { proxy_pass ...; proxy_http_version 1
12 2023-06-20
编程技术问答社区
无法在Lua代码中使用环境变量
我有一些LUA代码,我在openresty nginx.conf文件中使用.此LUA代码包含这样的行: ... local secret = os.getenv("PATH") assert(secret ~= nil, "Environment variable PATH not set") ... 仅出于测试原因,我尝试检查是否设置了路径变量,并且出于某种原因,声明不通过.我在控制台中看到: 环境变量路径未设置 但是,当我运行此 时 $ echo $PATH 我看到,这个变量确实具有一定的价值.那么,这是怎么了,我该如何修复呢? 解决方案 您需要告诉NGINX使环境变量可用.来自 docs for env指令 docs :除TZ变量外,还从其父过程继承的环境变量.该指令允许保留一些继承变量,更改其值或创建新的环境变量." 因此,在您的情况下,您需要在nginx.conf中指定env PATH;
8 2023-06-20
编程技术问答社区
用已经安装的openresty安装resty.http
我安装了OpenResty-1.13.6.1,但缺少" Resty.http"模块.我的开放式安装在/usr/local/openresty中,我需要将Resty.http模块与之集成.如何做? 解决方案 只需复制两个文件( https:///github.com/pintsized/lua-resty-http/tree/master/lib/resty ) 更新: 结果的文件结构应为: /usr/local/openresty/lualib/resty/http.lua /usr/local/openresty/lualib/resty/http_headers.lua
68 2023-04-26
编程技术问答社区
是否可以在NGINX中合并多个响应并发送一个响应?
我有Nginx/OpenResty,并且在一个VM上运行的其他一些服务.基本上,VM接受开放性的请求,然后接受开放式的转发请求,要求提供适当的服务.例如以下要求分别转发到Servicea,ServiceB和Servicec.它工作正常. 现在,我需要公开一个新的端点,该端点可以从所有服务A,B和C中获取响应.然后返回一个合并的响应. 我不能在我的位置使用多个proxy_pass,有人可以建议我如何实现这一目标?例如 在A,B和C服务. 解决方案 您可以像下面一样做.基本上,您可以从其他服务中捕获回复,然后将其组合 location /services/refALL { content_by_lua_block { local respA = ngx.location.capture("/services/refA") local respB = ngx.location.capture("/services/refB")
18 2023-04-22
编程技术问答社区
Lua。如何在内存中压缩一个字符串(gzip,不是zlib)?
给定一个字符串,如何用GZIP在内存中压缩它?我正在使用lua. 这听起来像是一个简单的问题,但是有很多库列表.到目前为止,我尝试过的一切都死了,要么我只能生产Zlib压缩字符串.在我的用例中,我需要GZIP压缩,就像接收器所期望的那样. 作为测试,如果将压缩字符串转移到文件中,zcat应该能够解压缩. 我正在使用开放式,所以任何LUA库都可以. (我到目前为止工作的唯一解决方案是将字符串转储到文件中,调用os.execute("gzip /tmp/example.txt")并将其读回.不幸的是,这不是一个实际的解决方案.) 解决方案 事实证明,Zlib离Gzip不远.区别在于GZIP有一个额外的标头. 要获取此标头,您可以使用 lua-zlib 像这样: local zlib = require "zlib" -- input: string -- output: string compressed with gzip function
28 2022-10-28
编程技术问答社区
为什么我不能设置多个cookies
我正在尝试设置多个 cookie,但它不起作用: if type(ngx.header["Set-Cookie"]) ~= "table" then ngx.header["Set-Cookie"] = {} end table.insert(ngx.header["Set-Cookie"], "Cookie1=abc; Path=/") table.insert(ngx.header["Set-Cookie"], "Cookie2=def; Path=/") table.insert(ngx.header["Set-Cookie"], "Cookie3=ghi; Path=/") 在客户端我没有收到任何 cookie. 解决方案 ngx.header["Set-Cookie"] 是一个特殊的表,每次修改都必须重新分配一个新表(插入或删除的元素对它没有影响)将发送到客户端的 cookie): if type(ngx.header["Set-Cookie"]) ==
84 2022-08-11
编程技术问答社区
Openresty。用lua进行http调用并返回其解析结果
我的问题 我正在使用 openresty 构建一个简单的服务器. 在调用此服务器时,它应该再次调用不同的服务器,获取 JSON 结果,对其进行处理并返回解析结果. 如果这个问题超出范围的原因,服务器应该在openresty中实现. 代码 error_log /dev/stdout info; events { worker_connections 14096; } http { access_log off; lua_package_path ";;/usr/local/openresty/nginx/?.lua;"; server { keepalive_requests 100000; proxy_http_version 1.1; keepalive_timeout 10; location / { content_by_lua_blo
1338 2022-07-26
编程技术问答社区
nginx - 如何在openresty的init_worker中定时查询mysql
问 题 想在init_worker中起一个定时器,去查询mysql的信息。发现在init_worker中无法使用tcp连接,那我要如何能在init_worker中获取mysql数据。网上找了个帖子是说调用shell命令来获取,只有这样了吗 解决方案 可以使用ngx.timer https://github.com/openresty/...
320 2022-07-19
编程技术问答社区
nginx - lua的mongodb库auth验证方法耗费时间占请求的三分之二!请问大神怎么优化下呢
问 题 验证的方法代码: function dbmethods:auth_scram_sha1(username, password) local user = string.gsub(string.gsub(username, '=', '=3D'), ',' , '=2C') local nonce = ngx.encode_base64(string.sub(tostring(math.random()), 3 , 14)) local first_bare = "n=" .. user .. ",r=" .. nonce local sasl_start_payload = ngx.encode_base64("n,," .. first_bare) r, err = self:cmd(attachpairs_start({ saslStart = 1 ; mecha
478 2022-07-19
编程技术问答社区
nginx - openresty 不会输出content-length头
问 题 openresty默认是chunked_transfer_encoding on的,也就是使用chunked编码,这时候content-length没用。 然后我们客户端那边对这个字段有需求,我们的业务逻辑也比较简单,我就把chunked关掉了。这时候变成短连接,但是不会自动生成content-length这个字段,如果要我在每次返回前,都手动计算返回的内容长度就比较费劲了,而且我是动态生成的内容。 解决方案 这个问题与是不是openresty无关,而是动态内容在输出时web服务器根本就不会知道你要输出内容的大小,如果是静态资源,在输出这些静态资源时,web服务器就能获取到资源的大小,也就能指定content-length响应头。所以动态内容要支持content-length响应头,只能是自己添加了。
1044 2022-07-19
编程技术问答社区
nginx - openresty无法使用require
不使·access_check.lua的时候,程序运行正常,使用就会出现错误。 环境使用了docker的openresty/openresty官方镜像。 nginx.conf配置如下: worker_processes 1; error_log logs/error.log; events { worker_connections 1024; } http { lua_package_path "lua/?.lua;app/?.lua"; lua_code_cache off; server { listen 6699; charset utf-8; #lua_need_request_body on; location / { default_type text/html; content_by_lua_block {
846 2022-07-17
编程技术问答社区