安装OpenResty 1.安装 首先你的Linux虚拟机必须联网
1)安装开发库 首先要安装OpenResty的依赖开发库,执行命令:
1 yum install -y pcre-devel openssl-devel gcc --skip-broken
2)安装OpenResty仓库 你可以在你的 CentOS 系统中添加 openresty
仓库,这样就可以便于未来安装或更新我们的软件包(通过 yum check-update
命令)。运行下面的命令就可以添加我们的仓库:
1 yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
如果提示说命令不存在,则运行:
1 yum install -y yum-utils
然后再重复上面的命令
3)安装OpenResty 然后就可以像下面这样安装软件包,比如 openresty
:
1 yum install -y openresty
4)安装opm工具 opm是OpenResty的一个管理工具,可以帮助我们安装一个第三方的Lua模块。
如果你想安装命令行工具 opm
,那么可以像下面这样安装 openresty-opm
包:
1 yum install -y openresty-opm
5)目录结构 默认情况下,OpenResty安装的目录是:/usr/local/openresty
看到里面的nginx目录了吗,OpenResty就是在Nginx基础上集成了一些Lua模块。
6)配置nginx的环境变量 打开配置文件:
在最下面加入两行:
1 2 export NGINX_HOME=/usr/local/openresty/nginxexport PATH=${NGINX_HOME} /sbin:$PATH
NGINX_HOME:后面是OpenResty安装目录下的nginx的目录
然后让配置生效:
2.启动和运行 OpenResty底层是基于Nginx的,查看OpenResty目录的nginx目录,结构与windows中安装的nginx基本一致:
所以运行方式与nginx基本一致:
1 2 3 4 5 6 nginx nginx -s reload nginx -s stop
nginx的默认配置文件注释太多,影响后续我们的编辑,这里将nginx.conf中的注释部分删除,保留有效部分。
修改/usr/local/openresty/nginx/conf/nginx.conf
文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 worker_processes 1 ;error_log logs/error .log;events { worker_connections 1024 ; }http { include mime.types; default_type application/octet-stream; sendfile on ; keepalive_timeout 65 ; server { listen 8081 ; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
在Linux的控制台输入命令以启动nginx:
然后访问页面:http://192.168.150.101:8081,注意ip地址替换为你自己的虚拟机IP:
3.备注 加载OpenResty的lua模块:
1 2 3 4 lua_package_path "/usr/local/openresty/lualib/?.lua;;" ;lua_package_cpath "/usr/local/openresty/lualib/?.so;;" ;
common.lua
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 local function read_http (path, params) local resp = ngx.location.capture(path ,{ method = ngx.HTTP_GET, args = params, }) if not resp then ngx.log (ngx.ERR, "http not found, path: " , path , ", args: " , args) ngx.exit (404 ) end return resp.bodyend local _M = { read_http = read_http } return _M
释放Redis连接API:
1 2 3 4 5 6 7 8 9 local function close_redis (red) local pool_max_idle_time = 10000 local pool_size = 100 local ok, err = red:set_keepalive(pool_max_idle_time, pool_size) if not ok then ngx.log (ngx.ERR, "放入redis连接池失败: " , err) end end
读取Redis数据的API:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 local function read_redis (ip, port, key) local ok, err = red:connect(ip, port) if not ok then ngx.log (ngx.ERR, "连接redis失败 : " , err) return nil end local resp, err = red:get(key) if not resp then ngx.log (ngx.ERR, "查询Redis失败: " , err, ", key = " , key) end if resp == ngx.null then resp = nil ngx.log (ngx.ERR, "查询Redis数据为空, key = " , key) end close_redis(red) return respend
开启共享词典:
1 2 lua_shared_dict item_cache 150m ;