zoukankan      html  css  js  c++  java
  • 浏览器给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
    
    
  • 相关阅读:
    cacti气象图调整(批量位置调整、更改生成图大小等)
    windows下安装,配置gcc编译器
    AOP技术应用和研究--OOP
    background-position 使用方法具体介绍
    iOS安全攻防(三):使用Reveal分析他人app
    textarea文本域宽度和高度(width、height)自己主动适应变化处理
    Cocos2d-X开发中国象棋《八》走棋
    div:给div加滚动栏 div的滚动栏设置
    GridView编辑删除操作
    AngularJS:实例
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/11396099.html
Copyright © 2011-2022 走看看