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