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 就可以看到打印的信息了

下篇博文我們將在此基礎上,完成請求定向分發的功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章