SpringBoot+Redis+MemCache+Nginx+Lua实现三级缓存架构(二)——Nginx环境安装和整合Lua

前面我们已经简单的介绍过了三级缓存的概念,接下来的博文中,我们需要搭建系统运行的环境、编写功能实现代码来实现我们的三级缓存架构,工欲善其事必先利其器,本片博文我们先来搭建Nginx环境以及整合Lua

Redis的环境搭建我们之前的博文 《Redis教程(一)——Redis安装》 已经搭建好了,本文只是实现三级缓存架构,所以Redis这里我们这暂时不做分布式集群,只使用单机版即可,以后如果有需要将SpringBoot整合Redis的方便变更下即可,不需要做代码层面上的改动。

Redis环境我们准备好了,现在我们开始在Centos7中搭建Nginx和Lua整合,这里我们使用流行的开源方案——OpenResty

为什么选择OpenResty呢,OpenResty中集成了Nginx+Lua环境,并且还提供了Redis客户端、mysql客户端,http客户端等大量的组件,方便我们搭建环境和开发,更方便的是,这个是我们中国人发明的,官方文档也是中文的,所以很方便我们查找相关的资料,对于英文不是很好的同学,真是极大的帮助了。

安装的方法,可以参考OpenResty-安装, 如果不想看官网的话,也可以阅读下面的安装方法,跟官网上的差不多

安装环境校验

首先查看Centos7是否安装了一下的软甲

    ## 查看是否存在gcc, Nginx依赖该环境
    rpm -qa|grep gcc
    
    ## 查看是否安装 Perl,nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库
    rpm -qa|grep pcre
    rpm -qa|grep pcre-devel
    
    ## 查看是否安装curl
    rpm -qa|grep curl
    
    ## 查看是否安装 openssl
    rpm -qa|grep openssl
    rpm -qa|grep openssl-devel

上面那个软件没有安装,则需要安装,已安装的可以不必再安装

    yum install pcre-devel openssl-devel gcc curl

安装 OpenResty

    ## 添加 openresty分库,便于安装或者更新软件包
    yum install yum-utils
    yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
    
    ## 安装openresty 和 resty命令行工具
    yum install openresty
    yum install openresty-resty
    
    ## 查看可安装的组件(当前可不安装,后期想要安装的时候,再查看具体的安装名称
    yum --disablerepo="*" --enablerepo="openresty" list available

至此我们已经安装好penResty的环境了,接下来我们先看看怎么使用

    ## 创建nginx运行需要的目录环境
    mkdir work
    cd work
    mkdir logs/ conf/
    
    ##创建nginx.conf文件
    cd conf
    vi nginx.conf

上述需要创建 nginx.conf文件,并且输入一下内容

    ## nginx.conf
    worker_processes  1;
    error_log logs/error.log;
    events {
        worker_connections 1024;
    }
    http {
        server {
            listen 8080;
            location / {
                default_type text/html;
                content_by_lua_block {
                    ngx.say("<p>hello, world</p>")
                }
            }
        }
    }

配置Nginx的环境变量

    ## 编辑 /etc/profile 文件,配置好nginx的环境变量
    vi /etc/profile
    
    ......
    NGINX_HOME=/usr/local/openresty/nginx
    export PATH=$PATH:$NGINX_HOME/sbin
    ......
    
    ## 环境变量生效
    source /etc/profile

查看环境变量配置是否生效

    ## 如果执行该命令 提示说查找不道nginx命令,则说明你的环境变量配置的 有问题,需要仔细查看下配置
    nginx -v
    

启动Nginx环境

    ## 启动Nginx环境 该命令必须在你刚才创建的work目录下执行,否则启动失败
    nginx -p `pwd`/ -c conf/nginx.conf

访问 http://192.168.56.105:8080/ 看看浏览器是不是显示 Hello world ,如果是则说明Nginx搭建成功

整合Lua

在整合之前我们先看下OpenResty目录下是否存在 lualib文件夹,OpenResty默认的安装路径是/usr/localhost/openresty这里面是lua的依赖,我们编写脚本时,需要手动引入这些依赖

image

首先先定义我们的工程目录结构:

--work
----conf
------nginx.conf
----lua
------requestDirect.conf
----lualib
------*.lua
------*.so

接下来我们需要在我们之前/work/conf/nginx.conf中的http模块中添加lua的依赖

    -- nginx.conf
    
    worker_processes  1;
    error_log logs/error.log;
    events {
        worker_connections 1024;
    }
    http {
       lua_package_path "/usr/local/openresty/lualib/?.lua;;";
       lua_package_cpath "/usr/local/openresty/lualib/?.so;;";
       include lua/requestDirect.conf;
       server {
          listen 8080;
          location / {
             default_type text/html;
             content_by_lua_block {
                 ngx.say("<p>hello, world</p>")
             }
          }
       }
    }

requestDirect.conf文件的内容

    -- requestDirect.conf
    server {
        listen     8080;
        server_name _;
        location /lua {  
          default_type 'text/html';  
          content_by_lua_block {
                 ngx.say("<p>hello, world</p>")
          }
        } 
    }

此时文件就添加完成了,先来测试下是否能启动成功

    ## 进入到 /home/work 目录下
    cd /home/work
    
    ## 编译 看看能否编译通过
    nginx -t
    
    ## 查看端口是否被占用
    losf -i:8080
    ## 删除进程 pid 此处的pid是lsof命令查询出来的,有几个就执行几次
    kill -9 pid
    
    ## 启动nginx服务
    nginx -p `pwd`/ -c /home/work/conf/nginx.conf

启动完成之后,访问 http://192.168.56.105:8080/lua 就能看到返回的结果了

项目工程文件

上面是我们测试Nginx是否集成Lua成功的,现在我们将项目工程话,目录结构依旧跟上面是一样的,我们将业务代码独立出来,不跟系统相关的代码放在一起。

上面还有一点,我们每次更新都需要手动kill掉nginx的进程,很麻烦,我们可以使用nginx的 reload方式来重新加载lua的配置

目录结构如下:

--work
----conf
------nginx.conf
----lua
------requestDirect.lua
--lualib
----*.lua
----*.so
  • 按照上述的工程目录结构,我们创建项目需要的文件夹
    ## /home/work下创建文件 conf文件夹 lua文件夹
    cd /home/work
    mkdir conf
    mkdir lua
    
    ## 创建 nginx.conf 和  lua/requestDirect.lua
    vi nginx.conf
    vi lua/requestDirect.lua
    

/home/work/conf/nginx.conf中添加如下的代码

  -- 注意这里的路径必须是绝对路径才行,如果是相对路径,则会直接请求到nginx的安装路径下,请求时报找不到对应文件的错误
    server {
      listen 80;
      location /lua {
         default_type text/html;
         content_by_lua_file /home/work/conf/lua/requestDirect.lua;
      }
   }

/home/work/conf/lua/requestDirect.lua文件中添加如下的代码

    ngx.say("hello world,this is nginx_lua project file");

将nginx目录下的 lualib依赖拷贝到 /home/work/lualib

   ## 在/home/work中拷贝 nginx目录下的lualib依赖文件
   cd /home/work
   cp -r /usr/local/openresty/lualib/ .
  • 我们需要更新nginx源目录下的conf/nginx.conf文件,并且在其中引入我们的工程目录的conf文件
    ## 进入到nginx的根目录下
    cd /usr/local/openresty/nginx/
    
    vi conf/nginx.conf
    ## 在nginx.conf 中的http模块中添加
    
    ....
    lua_package_path "/home/work/lualib/?.lua;;";
    lua_package_cpath "/home/work/lualib/?.so;;";
    include /home/work/conf/nginx.conf
    ....
    
  • 上面的文件添加完成之后我们就可以使用nginx本身自带的命令来启动nginx了
    ## 先查看能否编译成功,如果编译不通过会提示具体的错误
    nginx -t
    
    ## 重新加载
    nginx -s reload

至此我们的nginx整合lua在项目工程中配置的Demo示例已经完成了,在浏览器中访问 http://192.168.56.105:8080/lua 就可以看到打印的信息了

下篇博文我们将在此基础上,完成请求定向分发的功能

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容