安装lua
有linux版本的安装也有mac版本的安装。。我们采用linux版本的安装,首先我们准备一个linux虚拟机。
安装步骤,在linux系统中执行下面的命令。
//下载
curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz
//解压
tar zxf lua-5.3.5.tar.gz
cd lua-5.3.5
make linux test
此时再执行lua测试看lua是否安装成功
[root@localhost ~]# lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio</pre>
安装openresty
linux安装openresty:
1.添加仓库执行命令
yum install yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
2.执行安装
yum install openresty
3.安装成功后 会在默认的目录如下:
/usr/local/openresty
测试访问
重启下centos虚拟机,然后访问测试Nginx
访问地址:http://192.168.200.128/
lua脚本从数据库查询数据到redis,创建update_ad.lua
ngx.header.content_type="application/json;charset=utf8"
local cjson = require("cjson")
local mysql = require("resty.mysql")
local uri_args = ngx.req.get_uri_args()
//地址传来的参数
local position = uri_args["position"]
local db = mysql:new()
db:set_timeout(10000)
local props = {
host = "192.168.200.128",
port = 3306,
database = "数据库名",
user = "root",
password = "root"
}
local res = db:connect(props)
local select_sql = "select url,image from tb_ad where status ='1' and position='"..position.."' and start_time<= NOW() AND end_time>= NOW()"
res = db:query(select_sql)
db:close()
local redis = require("resty.redis")
local red = redis:new()
red:set_timeout(2000)
local ip ="192.168.200.128"
local port = 6379
red:connect(ip,port)
red:set("ad_"..position,cjson.encode(res))
red:close()
ngx.say("{flag:true}")
数据从redis到nginx,创建read_ad.lua
--设置响应头类型
ngx.header.content_type="application/json;charset=utf8"
--获取请求中的参数ID
local uri_args = ngx.req.get_uri_args();
local position = uri_args["position"];
--获取本地缓存
local cache_ngx = ngx.shared.dis_cache;
--根据ID 获取本地缓存数据
local adCache = cache_ngx:get('ad_cache_'..position);
if adCache == "" or adCache == nil then
--引入redis库
local redis = require("resty.redis");
--创建redis对象
local red = redis:new()
--设置超时时间
red:set_timeout(2000)
--连接
local ok, err = red:connect("192.168.200.128", 6379)
--获取key的值
local rescontent=red:get("ad_"..position)
--输出到返回响应中
ngx.say(rescontent)
--关闭连接
red:close()
--将redis中获取到的数据存入nginx本地缓存
cache_ngx:set('ad_cache_'..position, rescontent, 10*60);
else
--nginx本地缓存中获取到数据直接输出
ngx.say(adCache)
end
在/usr/local/openresty/nginx/conf/nginx.conf中添加头信息,和 location信息
server {
listen 80;
server_name localhost;
location /update_ad {
content_by_lua_file /root/lua/update_ad.lua;
}
location /ad_read {
#使用限流配置 burst 突发情况下 允许访问4个请求
limit_req zone=adRateLimit burst=4 nodelay;
content_by_lua_file /usr/local/openresty/lua/read_ad.lua;
}
}
如果要尝试访问可将前端页面放到/usr/local/openresty/nginx/html
下。
网友评论