Lua脚本本地调试

这里主要使用日志的方式进行debug

环境依赖

项目对openresty包的依赖比较高,所以环境基础都在openresty下进行

openresty的使用

openresty下载地址

下载完成后解压,具体使用方式和nginx没有什么区别,主要依赖文件是一下几个

nginx.exe # 负责启动服务
conf/nginx.conf  # nginx的配置文件 使用lua脚本主要也是在这里配置
logs  # 日志查看 排错

lua链接mysql校验用户

这里拿lua链接mysql为例

 -- utils_mysqllocal mysql = require "resty.mysql"
local cjson = require "cjson"
local _M = {}local function getUser(userNo, orgCode)db = _M:new()if not db thenreturn false, {}endlocal userRes, err, errcode, sqlstate = db:query("SELECT COUNT(F_user_account) F_count FROM t_user WHERE F_user_account = " .. userNo .. " AND F_deleted='0'")-- 目前用户不存在放行  只存入相关信息 设置匿名用户if not userRes thenngx.log(ngx.ERR, "用户--" .. userNo .. "-- 不存在" .. err)return false, {status = 401,message = "Bad token; " .. tostring(err)}endlocal orgUserRes, err, errcode, sqlstate = db:query("SELECT COUNT(F_user_account) F_count, F_status FROM t_org_user WHERE F_user_account = " .. userNo .. " AND F_org_code = " ..orgCode .. " AND F_deleted='0'")if not orgUserRes thenngx.log(ngx.ERR, "用户--" .. userNo .. "--和--" .. orgCode .. "--组织关系不存在"..err)return false, {status = 4060,message = "用户需要登录"}endngx.log(ngx.ERR, "orgUserRes Is" .. cjson.encode(orgUserRes))-- lua脚本似乎不遵循index=0的原则 [{"F_count":"1","F_status":"0"}]if orgUserRes[1]["F_status"] ~= '0' thenngx.log(ngx.ERR, "该组织下角色已被禁用,请联系管理员".. err)return false, {status = 7025,message = "该组织下角色已被禁用,请联系管理员"}endngx.log(ngx.WARN, "UserRes Is "..cjson.encode(userRes).. "orgUserRes Is" .. cjson.encode(orgUserRes))-- 校验成功的返回信息ngx.say('CheckUser Success')return true, {}
endfunction _M.new(self)local db, err = mysql:new()if not db thenngx.log(ngx.ERR, "failed to instantiate mysql: ", err)return nilend-- 1 secdb:set_timeout(1000)local ok, err, errcode, sqlstate = db:connect{host = "xxxx",port = "xxxx",database = "xxxx",user = "xxxx",password = "xxxx"}if not ok thenngx.log(ngx.ERR, "failed to connect:  ", err, errcode, sqlstate)return nilendreturn db
endfunction _M.close(self)local sock = self.sockif not sock thenreturn nil, "not initialized"endif self.subscribed thenreturn nil, "subscribed state"end-- put it into the connection pool of size 100,-- with 10 seconds max idle timeoutlocal ok, err = self.sock:set_keepalive(10000, 100)if not ok thenngx.log(ngx.ERR, "failed to set keepalive:", err)returnend
endgetUser('username', 'org_code')
-- return _M

修改配置文件nginx.conf


#user  nobody;
worker_processes 1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;
events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout 65;#gzip  on;server {# 修改原本的80端口为8765listen 8765;server_name localhost;#charset koi8-r;# 添加的lua脚本校验路径location /testlua {default_type 'text/html';  # 默认文本方式返回charset utf-8;lua_code_cache off;  # 不使用缓存content_by_lua_file  luaScript/utils_mysql.lua;  # 需要执行的lua脚本文件路径,这里的路径是相对于压缩包的路径,也可以使用绝对路径 注意windows下 \ 需要变成 /}#access_log  logs/host.access.log  main;location / {root html;index index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;#    listen       somename:8080;#    server_name  somename  alias  another.alias;#    location / {#        root   html;#        index  index.html index.htm;#    }#}# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}
}

启动openresty

双击 nginx.exe即可,浏览器输入http://localhost:8765进入启动页面

调试过程中,每次点击nginx.exe都会启动新的线程,导致有时候更新的项目但是打到的请求还是在老的配置服务上,为确保每次请求都是最新的,最好把线程都删掉

windows
# 展示线程
tasklist /fi "imagename eq nginx.exe"
# 杀掉线程
taskkill /fi "imagename eq nginx.exe" -f

image-20230705184426041

Lua脚本校验

浏览器输入http://localhost:8765/testlua进入插件校验页面

运行的日志和错误信息都可以在logs/access.log&error.log中找到,由于这里已经是处理完成的脚本信息,如何解决问题这里不做展示。

需要注意的是,在脚本文件中ngx.log(ngx.ERR, "xxxx")最好都设置成err级别,别的级别好像不会展示在日志中

image-20230705184337283

校验

Error

image-20230706104405576

Success

日志和错误信息都可以在logs/access.log&error.log中找到,由于这里已经是处理完成的脚本信息,如何解决问题这里不做展示。

需要注意的是,在脚本文件中ngx.log(ngx.ERR, "xxxx")最好都设置成err级别,别的级别好像不会展示在日志中

[外链图片转存中…(img-PpfLXDLJ-1689328661208)]

校验

Error

[外链图片转存中…(img-j6J54ZsA-1689328661209)]

Success

image-20230705183759286

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/29231.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL高阶语句

目录 一、常用查询 #嵌套/多条件 2、对结果进行分组 3、限制结果条目(limit⭐⭐⭐) 4、设置别名(alias ——》as) 5、通配符 一、常用查询 (增、删、改、查) 对 MySQL 数据库的查询,除了基…

消费者行为分析VR情景模拟演练系统

VR虚拟现实技术是一种先进的技术,利用VR开展消费者行为分析课程是一种创新的教育方式,它可以提高学生的学习兴趣和效果,同时也可以为企业提供更好的人才培训和发展机会。 1.帮助学生更好地理解和应用心理学概念:VR技术可以让学生…

STM32 HAL库定时器输入捕获SlaveMode脉宽测量

STM32 HAL库定时器输入捕获SlaveMode脉宽测量 SlaveMode模式简介 ✨SlaveMode复位模式:在发生一个触发输入事件时,计数器和它的预分频器能够重新被初始化;同时,如果TIMx_CR1寄存器的URS位为低,还会产生一个更新事件UEV…

一探究竟:人工智能、机器学习、深度学习

一、人工智能 1.1 人工智能是什么? 1956年在美国Dartmounth 大学举办的一场研讨会中提出了人工智能这一概念。人工智能(Artificial Intelligence),简称AI,是计算机科学的一个分支,它企图了解智能的实质&am…

安卓APK反编译+修改+重打包+签名

目录 1.下载反编译工具包。2.将APK包,重命名为ZIP,解压。放到反编译根目录下。3.使用apktool反编译修改smail文件,进行重打包4.重新打包5.重签名 1.下载反编译工具包。 反编译工具包地址:百度网盘 提取码:dsu3 解压后…

记录一次抓取WiFi驱动日志以及sniffer日志

起因 路由器桥接一个WiFi,然后设备连接这个路由器的WiFi,发现网络不可用,而手机或者电脑连接就没问题,与供应商沟通问题,需要抓取日志,记录一下 抓取WLAN DRIVER WLAN FW3日志 进入开发者模式打开启动WL…

采集极验4滑块验证码图片数据

在网络安全领域,验证码是一种常见的用于验证用户身份或防止恶意机器人攻击的技术。而极验4滑块验证码作为一种广泛应用的验证码形式,其具有较高的安全性和防御能力。本文将以获取极验4滑块验证码图片数据为主题,介绍相关技术和方法。 一、极…

stable diffusion webui mov2mov

手把手教你用stable diffusion绘画ai插件mov2mov生成动画_哔哩哔哩_bilibili手把手教你用stable diffusion绘画ai插件mov2mov生成动画, 视频播放量 14552、弹幕量 3、点赞数 275、投硬币枚数 114、收藏人数 980、转发人数 75, 视频作者 懂你的冷兮, 作者简介 科技改变世界&…

队列-来看Java骚操作

队列基本概念 队列(Queue)是一种常见的数据结构,采用先进先出(FIFO,First-In-First -Out)的策略来管理数据。类似于现实生活中的排队,新元素从队尾进入队列, 而队列中的元素从队头开…

软件测试行业的困境和迷局

中国的软件测试虽然起点较高,但是软件测试的发展似乎没有想象中那么顺利。 其实每个行业除了有自身领域外,还有属于自己的“生态系统”。属于软件测试的生态系统主要包括后备软件测试人员、软件开发人员和软件管理决策者。后备软件测试人员是软件测试的…

【C语言+sqlite3 API接口】实现水果超市

实验内容: 假如我家开了个水果超市,有以下水果,想实现自动化管理,扫描二维码就能知道当前的水果状态,进货几天了, 好久需要再次进货,那些水果畅销,那些水果不畅销,那些水…

Linux之设备树解耦架构解读-V1.0

术语和缩略语 本文档使用了以下术语和缩略语 Dts:DTS即Device Tree Source,是一个文本形式的文件,用于描述硬件信息。一般都是固定信息,无法变更,无法overlay。 Dtsi:可以理解为dts的公共部分&#xff0…