一、需要在liunx上安装openresty
1.添加仓库执行命令
yum install yum-utilsyum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
2.执行安装
yum install openresty -y
3.安装成功后 会在默认的目录如下:
/usr/local/openresty
4.默认已经安装好了nginx,在目录:
/usr/local/openresty/nginx
5. 启动openresty
cd /usr/local/openresty/nginx/sbin./nginx
6.停止openresty
./nginx -s stop
7.重启openresty
./nginx -s reload
8.测试访问
访问地址: http://ip/
![](https://i-blog.csdnimg.cn/blog_migrate/f19210eb4a74406863a7fb13feca8bfb.png)
二、DOCKER里的MySQL、REDIS部署
1.安装docker
yum update
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
docker -v
![](https://i-blog.csdnimg.cn/blog_migrate/bdb752a8f515ff9dab7a48a4f8c0514c.png)
{"registry-mirrors": ["https:// 你的 ID.mirror.aliyuncs.com"]}
启动docker服务: systemctl start docker
2.MySQL部署
docker search mysql
docker pull mysql:5.7
docker run -d --name = c_mysql -p 33306 :3306 -e MYSQL_ROOT_PASSWORD = 123456 -eMYSQL_DATABASE = dn mysql:5.7
// 开启 mysql 容器docker exec -it c_mysql /bin/bash// 登录 mysqlmysql -u root -p// 赋外网访问权限ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';// 刷新权限flush privileges;
3.Redis部署
docker search redis
docker pull redis:5.0
docker run -id --name = c_redis -p 6379 :6379 redis:5.0docker exec -it c2 /bin/bash # 进入容器
redis-cliredis-cli --raw
三、lua脚本的配置
1.实现思路-查询数据放入redis中
-- 响应类型
ngx.header.content_type="application/json;charset=utf8"
-- json转换模块
local cjson = require("cjson")
-- mysql连接模块
local mysql = require("resty.mysql")
-- 获取所有请求参数
local uri_args = ngx.req.get_uri_args()
-- 获取请求参数中的id
local categoryid = uri_args["id"]-- 创建数据库对象
local db = mysql:new()
-- 超时时间 1000毫秒
db:set_timeout(1000)
-- 连接数据库属性
local props = {
host = "192.168.174.130",
port = 33306,
database = "dn",
user = "root",
password = "123456"
}
-- 连接数据库
local res = db:connect(props)
-- 定义查询语句
local select_sql = "select url,pic from tb_content where status ='1' and category_id='"..categoryid.."'"
res = db:query(select_sql)
db:close()ngx.say("{\"res\":cjson.encode(res)}")
local redis = require("resty.redis")
local red = redis:new()
red:set_timeout(2000)local ip = "192.168.174.130"
local port = 6379
red:connect(ip,port)
red:set("content_"..categoryid,cjson.encode(res))
red:close()ngx.say("{\"flag\":true}")
server {listen 80;server_name localhost;location / update_content {content_by_lua_file / root /content_lua/update_content.lua;}}
![](https://i-blog.csdnimg.cn/blog_migrate/66885f2ca3667444177cf6d84e05fb5d.png)
2.实现思路-从redis中获取数据
--设置响应头类型
ngx.header.content_type="application/json;charset=utf8"
--获取请求中的参数ID
local uri_args = ngx.req.get_uri_args();
local id = uri_args["id"];
--引入redis库
local redis = require("resty.redis");
--创建redis对象
local red = redis:new()
--设置超时时间
red:set_timeout(2000)
--连接
local ok, err = red:connect("192.168.174.130", 6379)
--获取key的值
local rescontent=red:get("content_"..id)
--输出到返回响应中
ngx.say(rescontent)
--关闭连接
red:close()
location / read_content {content_by_lua_file / root /content_lua/read_content.lua;}
3.加入openresty本地缓存
ngx.header.content_type="application/json;charset=utf8"
local uri_args = ngx.req.get_uri_args();
local categoryid = uri_args["id"];
--获取本地缓存
local cache_ngx = ngx.shared.dis_cache;
--根据ID 获取本地缓存数据
local contentCache = cache_ngx:get('content_cache_'..categoryid);if contentCache == "" or contentCache == nil
then
local redis = require("resty.redis");
local red = redis:new()
red:set_timeout(2000)
red:connect("192.168.174.130", 6379)
local rescontent=red:get("content_"..categoryid);
if ngx.null == rescontent or rescontent == ""
then
local cjson = require("cjson");
local mysql = require("resty.mysql");
local db = mysql:new();
db:set_timeout(2000)
local props = {
host = "192.168.174.130",
port = 33306,
database = "dn",
user = "root",
password = "123456"
}
local res = db:connect(props);
local select_sql = "select url,pic from tb_content where status ='1' and category_id='"..categoryid.."'";
res = db:query(select_sql);
local responsejson = cjson.encode(res);
red:set("content_"..categoryid,responsejson);
-- ngx.say(" === ");
ngx.say(responsejson);
-- ngx.say(" === ");
-- ngx.say("{\"响应来自\":\"mysql\"}")
db:close();
else
cache_ngx:set('content_cache_'..categoryid, rescontent, 10*60);
-- ngx.say("{\"响应来自\":\"redis缓存\"}")
ngx.say(rescontent);
end
red:close();
else
ngx.say(contentCache)
-- ngx.say("{\"响应来自\":\"nginx本地缓存\"}");
end
lua_shared_dict dis_cache 128m; #是在http里location / read_new_content {content_by_lua_file / root /content_lua/read_new_content.lua;}#是在server里
4.清除缓存
在/root/lua目录下创建remove_content.lua,代码如下:
ngx.header.content_type="application/json;charset=utf8"
local uri_args = ngx.req.get_uri_args();
local categoryid = uri_args["id"];
--获取本地缓存
local cache_ngx = ngx.shared.dis_cache;
--清除本地缓存数据
cache_ngx:set('content_cache_'..categoryid,nil);local redis = require("resty.redis");
local red = redis:new();
red:connect("192.168.174.130",6379);
red:set("content_"..categoryid,"");ngx.say("{\"msg\":\"缓存被清除\"}")
在 nginx.conf配置
location /clear_cache {content_by_lua_file /root/content_lua/clear_cache.lua;}
四、网站首页前台工程广告轮播图展示
1.网站首页工程搭建 ,创建静态web工程 , 网站首页开发 ,部署页面
上传首页相关文件到nginx目录:/usr/local/openresty/nginx/html
2.访问测试
访问地址: http://ip/index.html