安装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

安装OpenResty - 图1

看到里面的nginx目录了吗,OpenResty就是在Nginx基础上集成了一些Lua模块。

6)配置nginx的环境变量

打开配置文件:

  1. vi /etc/profile

在最下面加入两行:

  1. export NGINX_HOME=/usr/local/openresty/nginx
  2. export PATH=${NGINX_HOME}/sbin:$PATH

NGINX_HOME:后面是OpenResty安装目录下的nginx的目录

然后让配置生效:

  1. source /etc/profile

2.启动和运行

OpenResty底层是基于Nginx的,查看OpenResty目录的nginx目录,结构与windows中安装的nginx基本一致:

安装OpenResty - 图2

所以运行方式与nginx基本一致:

  1. # 启动nginx
  2. nginx
  3. # 重新加载配置
  4. nginx -s reload
  5. # 停止
  6. nginx -s stop

nginx的默认配置文件注释太多,影响后续我们的编辑,这里将nginx.conf中的注释部分删除,保留有效部分。

修改/usr/local/openresty/nginx/conf/nginx.conf文件,内容如下:

  1. #user nobody;
  2. worker_processes 1;
  3. error_log logs/error.log;
  4. events {
  5. worker_connections 1024;
  6. }
  7. http {
  8. include mime.types;
  9. default_type application/octet-stream;
  10. sendfile on;
  11. keepalive_timeout 65;
  12. server {
  13. listen 8081;
  14. server_name localhost;
  15. location / {
  16. root html;
  17. index index.html index.htm;
  18. }
  19. error_page 500 502 503 504 /50x.html;
  20. location = /50x.html {
  21. root html;
  22. }
  23. }
  24. }

在Linux的控制台输入命令以启动nginx:

  1. nginx

然后访问页面:http://192.168.150.101:8081,注意ip地址替换为你自己的虚拟机IP:

3.备注

加载OpenResty的lua模块:

  1. #lua 模块
  2. lua_package_path "/usr/local/openresty/lualib/?.lua;;";
  3. #c模块
  4. lua_package_cpath "/usr/local/openresty/lualib/?.so;;";

common.lua

  1. -- 封装函数,发送http请求,并解析响应
  2. local function read_http(path, params)
  3. local resp = ngx.location.capture(path,{
  4. method = ngx.HTTP_GET,
  5. args = params,
  6. })
  7. if not resp then
  8. -- 记录错误信息,返回404
  9. ngx.log(ngx.ERR, "http not found, path: ", path , ", args: ", args)
  10. ngx.exit(404)
  11. end
  12. return resp.body
  13. end
  14. -- 将方法导出
  15. local _M = {
  16. read_http = read_http
  17. }
  18. return _M

释放Redis连接API:

  1. -- 关闭redis连接的工具方法,其实是放入连接池
  2. local function close_redis(red)
  3. local pool_max_idle_time = 10000 -- 连接的空闲时间,单位是毫秒
  4. local pool_size = 100 --连接池大小
  5. local ok, err = red:set_keepalive(pool_max_idle_time, pool_size)
  6. if not ok then
  7. ngx.log(ngx.ERR, "放入redis连接池失败: ", err)
  8. end
  9. end

读取Redis数据的API:

  1. -- 查询redis的方法 ipportredis地址,key是查询的key
  2. local function read_redis(ip, port, key)
  3. -- 获取一个连接
  4. local ok, err = red:connect(ip, port)
  5. if not ok then
  6. ngx.log(ngx.ERR, "连接redis失败 : ", err)
  7. return nil
  8. end
  9. -- 查询redis
  10. local resp, err = red:get(key)
  11. -- 查询失败处理
  12. if not resp then
  13. ngx.log(ngx.ERR, "查询Redis失败: ", err, ", key = " , key)
  14. end
  15. --得到的数据为空处理
  16. if resp == ngx.null then
  17. resp = nil
  18. ngx.log(ngx.ERR, "查询Redis数据为空, key = ", key)
  19. end
  20. close_redis(red)
  21. return resp
  22. end

开启共享词典:

  1. # 共享字典,也就是本地缓存,名称叫做:item_cache,大小150m
  2. lua_shared_dict item_cache 150m;