浏览器给openresty连接发送参数请求,查询数据库,并返回json数据
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;
log_format log_resp_body '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$request_time $bytes_sent $request_length "$request_body" "$resp_body"';
lua_package_path "/usr/local/openresty/lualib/?.lua;;"; #lua 模块
lua_package_cpath "/usr/local/openresty/lualib/?.so;;"; #c模块
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
server_tokens off;
#gzip on;
# lua
#lua_shared_dict limit 10m;
#lua_package_path "/usr/local/openresty/nginx/conf/waf/?.lua";
#init_by_lua_file "/usr/local/openresty/nginx/conf/waf/init.lua";
#access_by_lua_file "/usr/local/openresty/nginx/conf/waf/access.lua";
server {
listen 80;
server_name 192.168.0.174;
#charset koi8-r;
access_log logs/host.access.log log_resp_body;
lua_need_request_body on;
set $resp_body "";
body_filter_by_lua '
local resp_body = string.sub(ngx.arg[1], 1, 1000)
ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_body
if ngx.arg[2] then
ngx.var.resp_body = ngx.ctx.buffered
end
';
location / {
root html;
index index.html index.htm;
}
location =/hello {
default_type 'text/plain';
content_by_lua 'ngx.say("欢迎使用Lua")';
}
location /lua {
default_type 'text/html';
content_by_lua_file /usr/local/openresty/nginx/conf/lua_conf/test.lua;
}
location /lua_var {
default_type 'text/plain';
content_by_lua_block {
ngx.say(ngx.var.arg_b)
}
}
location /lua_request {
default_type 'text/html';
content_by_lua_file /usr/local/openresty/nginx/conf/lua_conf/lua_request.lua;
}
location /lua_response {
default_type 'text/html';
content_by_lua_file /usr/local/openresty/nginx/conf/lua_conf/lua_response.lua;
}
location = /lua_log{
default_type 'text/html';
content_by_lua_file /usr/local/openresty/nginx/conf/lua_conf/lua_log.lua;
}
location /lua_sum {
internal;
content_by_lua_block {
local args = ngx.req.get_uri_args()
ngx.say(tonumber(args.a) + tonumber(args.b))
}
}
location = /lua_sum_test {
content_by_lua_block {
local res = ngx.location.capture("/lua_sum", {args={a=3, b=8}})
ngx.say("status:", res.status, " response:", res.body)
}
}
location /lua_redirect {
default_type 'text/html';
content_by_lua_file /usr/local/openresty/nginx/conf/lua_conf/lua_redirect.lua;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location ~ /lua_cjson {
default_type 'text/html';
content_by_lua_file /usr/local/openresty/nginx/conf/lua_conf/test_cjson.lua;
}
location /lua_mysql {
default_type 'text/html';
content_by_lua_file /usr/local/openresty/nginx/conf/lua_conf/test_mysql.lua;
}
#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;
# }
#}
}
test_mysql.lua文件
--[[
说明:
1.传递单个参数进行查询
2.实际使用需要修改数据库连接信息,查询表的信息
3.操作流程大致是获取传递过来的参数,连接数据库,构造查询sql,然后以json格式返回查询的结果
--]]
-- 引用外部lua文件模块
local mysql = require("resty.mysql")
local cjson = require("cjson")
local db, err = mysql:new()
if not db then
ngx.say("nfailed to instantiate mysql: ", err)
return
end
--设置数据库连接超时时间,1 sec
db:set_timeout(1000)
local props = {
host = "192.168.0.254",
port = 3306,
database = "hkd",
user = "hkd",
password = "Hkd123456;",
charset = "utf8",
max_packet_size = 1024 * 1024,
}
local ok, err, errcode, sqlstate = db:connect(props)
if not ok then
ngx.say("failed to connect: ", err, ": ", errcode, " ", sqlstate)
-- return close_db(db)
end
-- ngx.say("connected to mysql.")
-- 获取get参数
-- 1.链接样式:http://192.168.0.175/lua_mysql?name=111
-- 2.curl样式:curl http://192.168.0.175/lua_mysql?name=111
-- 3.postman软件:http://192.168.0.175/lua_mysql?name=111 (在Params中添加参数)
local arg = ngx.req.get_uri_args()
for k,v in pairs(arg) do
local select_sql = string.format("select * from jeecg_demo where %s=%s" ,k,v) -- 字符串格式化
res, err, errcode, sqlstate = db:query(select_sql)
if not res then
ngx.say("select error : ", err, " , errcode : ", errcode, " , sqlstate : ", sqlstate)
return close_db(db)
end
end
--获取post参数
-- 1.curl样式:curl http://192.168.0.175/lua_mysql -X POST -d "name=111"
-- 2.postman软件:http://192.168.0.175/lua_mysql (在x-www-form-urlencoded中添加参数)
ngx.req.read_body()
local arg = ngx.req.get_post_args()
for k,v in pairs(arg) do
-- ngx.say("[POST] key:", k, " v:", v)
local select_sql = string.format("select * from jeecg_demo where %s=%s" ,k,v) -- 字符串格式化
res, err, errcode, sqlstate = db:query(select_sql, 10)
if not res then
ngx.say("bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
return
end
end
-- 把查询结果包装成json返回
ngx.say("result: ", cjson.encode(res))
local ok, err = db:set_keepalive(10000, 100)
if not ok then
ngx.say("failed to set keepalive: ", err)
return
end
-- 关闭数据库连接
local function close_db(db)
if not db then
return
end
db:close()
-- ngx.say("success to close db: ", err)
end
close_db(db)
openresty下lualib目录结构
[root@bogon openresty]# tree lualib/
lualib/
├── cjson.so
├── librestysignal.so
├── ngx
│ ├── balancer.lua
│ ├── base64.lua
│ ├── errlog.lua
│ ├── ocsp.lua
│ ├── pipe.lua
│ ├── process.lua
│ ├── re.lua
│ ├── resp.lua
│ ├── semaphore.lua
│ ├── ssl
│ │ └── session.lua
│ └── ssl.lua
├── redis
│ └── parser.so
├── resty
│ ├── aes.lua
│ ├── core
│ │ ├── base64.lua
│ │ ├── base.lua
│ │ ├── ctx.lua
│ │ ├── exit.lua
│ │ ├── hash.lua
│ │ ├── misc.lua
│ │ ├── ndk.lua
│ │ ├── phase.lua
│ │ ├── regex.lua
│ │ ├── request.lua
│ │ ├── response.lua
│ │ ├── shdict.lua
│ │ ├── time.lua
│ │ ├── uri.lua
│ │ ├── utils.lua
│ │ ├── var.lua
│ │ └── worker.lua
│ ├── core.lua
│ ├── dns
│ │ └── resolver.lua
│ ├── limit
│ │ ├── conn.lua
│ │ ├── count.lua
│ │ ├── req.lua
│ │ └── traffic.lua
│ ├── lock.lua
│ ├── lrucache
│ │ └── pureffi.lua
│ ├── lrucache.lua
│ ├── md5.lua
│ ├── memcached.lua
│ ├── mysql.lua
│ ├── random.lua
│ ├── redis.lua
│ ├── sha1.lua
│ ├── sha224.lua
│ ├── sha256.lua
│ ├── sha384.lua
│ ├── sha512.lua
│ ├── sha.lua
│ ├── shell.lua
│ ├── signal.lua
│ ├── string.lua
│ ├── upload.lua
│ ├── upstream
│ │ └── healthcheck.lua
│ └── websocket
│ ├── client.lua
│ ├── protocol.lua
│ └── server.lua
└── tablepool.lua