浏览器给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

posted @ 2019-08-22 18:25  哈喽哈喽111111  阅读(1732)  评论(0编辑  收藏  举报