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

  • 相关阅读:
    GitLab 介绍
    git 标签
    git 分支
    git 仓库 撤销提交 git reset and 查看本地历史操作 git reflog
    git 仓库 回退功能 git checkout
    python 并发编程 多进程 练习题
    git 命令 查看历史提交 git log
    git 命令 git diff 查看 Git 区域文件的具体改动
    POJ 2608
    POJ 2610
  • 原文地址:https://www.cnblogs.com/staticking/p/9939034.html
Copyright © 2011-2022 走看看