zoukankan      html  css  js  c++  java
  • openresty(nginx+lua)初识

    1、新增项目配置文件:

    vim /usr/example/example1.conf
    
    
    --将以下内容加入example1.conf
    server {  
        listen       80;  
        server_name  _;
         #~ 表示匹配所有请求路径
         #(d+)/(d+) 正则匹配 location ~ /lua_request/(d+)/(d+) { #设置nginx变量 set $a $1; set $b $host; default_type "text/html"; #nginx内容处理 content_by_lua_file /usr/example/lua/lua_request.lua; #内容体处理完成后调用 echo_after_body "ngx.var.b $b"; } }

    2、编写lua脚本(获取http请求信息)

    vim /usr/example/lua/lua_request.lua
    
    --将以下内容加入lua_request.lua
    
    --nginx变量
    --ngx.var nginx变量,如对变量ngx.var.b = 2赋值,需要提前声明。
    --nginx location中使用正则捕获数组,所以可以使用ngx.var[index]获取,index:索引值,此索引值默认从1开始 local var = ngx.var ngx.say("ngx.var.a :",var.a, "</br>") ngx.say("ngx.var.b :",var.b, "</br>") ngx.say("ngx.var[2] :",var[2], "</br>") ngx.var.b=2; ngx.say("</br>") --请求头
    --get_headers() 获取请求头,默认获取请求头的前100位,也可以使用get_headers(0)获取所有 local headers = ngx.req.get_headers() ngx.say("headers begin","</br>")
    --headers["请求头中的key值"] ngx.say("Host :",headers["Host"],"</br>") ngx.say("user-agent :",headers["user-agent"],"</br>") ngx.say("user-agent :",headers.user_agent,"</br>") for k,v in pairs(headers) do if type(v) == "table" then ngx.say(k,":",table.concat(v,","),"</br>") else ngx.say(k,":",v,"</br>") end end ngx.say("headers end","</br>") ngx.say("</br>") --get请求URI参数 ngx.say("uri args begin","</br>")
    --get_uri_args() 获取请求参数 local uri_args = ngx.req.get_uri_args() for k,v in pairs(uri_args) do if type(v) =="table" then ngx.say(k,":",table.concat(v,", "),"</br>") else ngx.say(k,":",v,"</br>") end end ngx.say("uri args end","</br>") ngx.say("</br>") --post请求参数
    --read_body() 读取请求体;也可在nginx中配置 lua_need_request_body on; 不推荐此种配置方式 ngx.req.read_body() ngx.say("post args begin","</br>") local post_args =ngx.req.get_post_args() for k,v in pairs(post_args) do if type(v) == "table" then ngx.say(k, ":" ,table.concat(v,", "),"</br>") else ngx.say(k,":",v,"</br>") end end ngx.say("post args end","</br>") ngx.say("</br>") --请求http协议版本 ngx.say("ngx.req.http_version :",ngx.req.http_version(),"</br>") --请求方法 ngx.say("ngx.req.get_method : ", ngx.req.get_method(), "<br/>") --未解析的请求头字符串 ngx.say("ngx.req.raw_header:",ngx.req.raw_header(),"</br>") --未解析的body内容 ngx.say("ngx.req.get_body_dat :",ngx.req.get_body_data(),"</br>") ngx.say("</br>")

    3、检查配置文件是否正确

    ./sbin/nginx -t
    

    4、重启openresty

     sudo /sbin/service openresty stop
    
     sudo /sbin/service openresty start
    

    5、测试:

    浏览器访问:http://127.0.0.1/lll/lua_request/1/5/2?a=3&b=4

    由于通过浏览器请求方式为get方式 ,所以post处没有打印出有效信息。

    6、其他API

    --重定向
    ngx.redirect("http://www.baidu.com", 302)
    --未解码的uri
    ngx.var.request_uri
    --解码
    ngx.unescape_uri(request_uri)
    --MD5加密
    ngx.md5("44444444")
    -- uri编码解码
    ngx.escape_uri/ngx.unescape_uri
    --参数编码解码
    ngx.encode_args/ngx.decode_args
    --BASE64编码解码
    ngx.encode_base64/ngx.decode_base64
    --nginx正则表达式匹配
    ngx.re.match
    

     更多nginx  http api : http://wiki.nginx.org/HttpLuaModule#Nginx_API_for_Lua

     文章参考自 :http://jinnianshilongnian.iteye.com/blog/2186448

  • 相关阅读:
    jquery-4 完整表单验证实例
    从程序员的角度分析微信小程序(编程语言:用到什么学什么)
    微信程序开发
    css3-4 css3边框样式
    css3-3 css3背景样式
    boxfilter 实现
    opencv在arm和x86在移植
    PAT 1033. To Fill or Not to Fill (贪婪)
    [git] fatal: This operation must be run in a work tree
    spring与mybatis集成和事务控制
  • 原文地址:https://www.cnblogs.com/staticking/p/9939034.html
Copyright © 2011-2022 走看看