openresty学习

openresty学习

1、获取参数

#ngx.say("hello lua")

-- 获取 header
local headers = ngx.req.get_headers()
for k,v in pairs(headers) do
        ngx.say("[header] name:", k, " v:", v)
        ngx.say("<br>")
end

-- 获取 body 信息

ngx.req.read_body() --获取body数据需要先读取  包括post获取参数
local data = ngx.req.get_body_data()
ngx.say(data)

--get
local getargs=ngx.req.get_uri_args()
for k,v in pairs(getargs)
do
        ngx.say("GET key: ",k," value:",v)
        ngx.say("<br>")
end

--post
local postargs=ngx.req.get_post_args()
for k,v in pairs(postargs)
do
        ngx.say("POST key: ",k," value:",v)
        ngx.say("<br>")
end

2、连接redis

​ 创建redisdemo.lua文件

--1、引入redis的模块
local importRedis= require "resty.redis"


--2、实例化对象
local redis=importRedis:new()

--3、创建连接
local ok,err=redis:connect("192.168.50.227",7002)

if not ok then
    ngx.say("redis connect err",err)
else
    ngx.say("redis connect ok",ok)
end
ngx.say("<br/>")
--4、调用命令
local ok,err=redis:get("heima")
if not ok then
    ngx.say("get redis data  err",err)
else
    ngx.say("get redis data ok",ok)
end
ngx.say("<br/>")

3、修改nginx.conf文件


        location / {
            root   html;
            default_type text/html;
        #    content_by_lua_block {
        #    ngx.say("hello nginx")
        #       }
        content_by_lua_file /usr/local/openresty/nginx/conf/redisdemo.lua;  #配置lua脚本位置
        index  index.html index.htm;
        }

4、使用kafka

下载https://github.com/doujiang24/lua-resty-kafka/releases 拷贝lua-resty-kafka-0.09\lib\resty\kafka 目录到环境/usr/local/openresty/lualib/resty目录下

--启用保护机制(当前活跃连接数小于 1000 时采集数据,大于 1000 时停止采集数据)
--最大的用户数阈值
local maxUserNumber=1000
--获取当前活跃连接数
local activeUserNumber=ngx.var.connections_active

--当前用户连接数少于1000时采集
if(tonumber(activeUserNumber)<tonumber(maxUserNumber)) then


--1、引入kafka第三方的依赖包
local importkafka= require "resty.kafka.producer"
--2、实例画broker_list数据
local broker_list={{host="192.168.50.227",port=9092},{host="192.168.50.12",port=9092},{host="192.168.50.173",port=9092}}
--实例topic
local topic="B2CDATA_COLLECTION3"
--设置分区
local topicPartitions=2

--3、创建kafka生产者
local kafkaProducer=importkafka:new(broker_list)

--实例数据写入kafka分区的编号
--获取共享字典
local   sharedData=ngx.shared.shared_data
--获取共享字典的数据
local dataCounts=sharedData:get("count")
--第一次获取数据是空的
if not dataCounts then
--为空设置1
sharedData:set("count",1)
--重新获取值
dataCounts=sharedData:get("count")
end
local partitionNumber=tostring(dataCounts%topicPartitions)
--设置数据编号自增
sharedData:incr("count",1)
--web输出
ngx.say("dataCounts:",dataCounts)
ngx.say("<br/>")
ngx.say("partitionNumber:",partitionNumber)
--实例将要打入kafka的数据
local message="12345-67890"


--获取用于支撑反爬虫识别的数据
--获取Time_local
local time_local=ngx.var.time_local
if time_local==nil then
time_local=""
end

local request = ngx.var.request
if request == nil then
request = ""
end
local request_method = ngx.var.request_method
if request_method == nil then
request_method = ""
end
local content_type = ngx.var.content_type
if content_type == nil then
content_type = ""
end
ngx.req.read_body()
local request_body = ngx.var.request_body
if request_body == nil then
request_body = ""
end
local http_referer = ngx.var.http_referer
if http_referer == nil then
http_referer = ""
end
local remote_addr = ngx.var.remote_addr
if remote_addr == nil then
remote_addr = ""
end
local http_user_agent = ngx.var.http_user_agent
if http_user_agent == nil then
http_user_agent = ""
end
local time_iso8601 = ngx.var.time_iso8601
if time_iso8601 == nil then
time_iso8601 = ""
end
local server_addr = ngx.var.server_addr
if server_addr == nil then
server_addr = ""
end
local http_cookie = ngx.var.http_cookie
if http_cookie == nil then
http_cookie = ""
end


local message = time_local .."#CS#".. request .."#CS#".. request_method .."#CS#"..
content_type .."#CS#".. request_body .."#CS#".. http_referer .."#CS#"..
remote_addr .."#CS#"..
http_user_agent .."#CS#".. time_iso8601 .."#CS#".. server_addr .."#CS#".. http_cookie;

--发送数据
kafkaProducer:send(topic,partitionNumber,message)
end

                                      

resty使用lua连接redis

--1、引入redis的模块
local importRedis= require "resty.redis"


--2、实例化对象
local redis=importRedis::new()

--3、创建连接
local ok,err=redis:connect("192.168.50.227",7002)

if not ok then
    ngx.say("redis connect err",err)
else
    ngx.say("redis connect ok",ok)
end

--4、调用命令
local ok,err=redis:get("heima")
if not ok then
    ngx.say("get redis data  err",err)
else
    ngx.say("get redis data ok",ok)
end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值