前面我們已經(jīng)簡單的介紹過了三級緩存的概念噪漾,接下來的博文中往枷,我們需要搭建系統(tǒng)運行的環(huán)境菲驴、編寫功能實現(xiàn)代碼來實現(xiàn)我們的三級緩存架構(gòu),工欲善其事必先利其器错英,本片博文我們先來搭建Nginx環(huán)境以及整合Lua
Redis的環(huán)境搭建我們之前的博文 《Redis教程(一)——Redis安裝》 已經(jīng)搭建好了入撒,本文只是實現(xiàn)三級緩存架構(gòu),所以Redis這里我們這暫時不做分布式集群椭岩,只使用單機版即可茅逮,以后如果有需要將SpringBoot整合Redis的方便變更下即可,不需要做代碼層面上的改動判哥。
Redis環(huán)境我們準(zhǔn)備好了氮唯,現(xiàn)在我們開始在Centos7中搭建Nginx和Lua整合,這里我們使用流行的開源方案——OpenResty
為什么選擇OpenResty
呢姨伟,OpenResty中集成了Nginx+Lua環(huán)境惩琉,并且還提供了Redis客戶端、mysql客戶端夺荒,http客戶端等大量的組件瞒渠,方便我們搭建環(huán)境和開發(fā),更方便的是技扼,這個是我們中國人發(fā)明的伍玖,官方文檔也是中文的,所以很方便我們查找相關(guān)的資料剿吻,對于英文不是很好的同學(xué)窍箍,真是極大的幫助了。
安裝的方法,可以參考OpenResty-安裝椰棘, 如果不想看官網(wǎng)的話纺棺,也可以閱讀下面的安裝方法,跟官網(wǎng)上的差不多
安裝環(huán)境校驗
首先查看Centos7是否安裝了一下的軟甲
## 查看是否存在gcc, Nginx依賴該環(huán)境
rpm -qa|grep gcc
## 查看是否安裝 Perl,nginx 的 http 模塊使用 pcre 來解析正則表達(dá)式邪狞,所以需要在 linux 上安裝 pcre 庫祷蝌,pcre-devel 是使用 pcre 開發(fā)的一個二次開發(fā)庫。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
## 查看可安裝的組件(當(dāng)前可不安裝,后期想要安裝的時候剑令,再查看具體的安裝名稱
yum --disablerepo="*" --enablerepo="openresty" list available
至此我們已經(jīng)安裝好penResty
的環(huán)境了糊啡,接下來我們先看看怎么使用
## 創(chuàng)建nginx運行需要的目錄環(huán)境
mkdir work
cd work
mkdir logs/ conf/
##創(chuàng)建nginx.conf文件
cd conf
vi nginx.conf
上述需要創(chuàng)建 nginx.conf文件,并且輸入一下內(nèi)容
## 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的環(huán)境變量
## 編輯 /etc/profile 文件吁津,配置好nginx的環(huán)境變量
vi /etc/profile
......
NGINX_HOME=/usr/local/openresty/nginx
export PATH=$PATH:$NGINX_HOME/sbin
......
## 環(huán)境變量生效
source /etc/profile
查看環(huán)境變量配置是否生效
## 如果執(zhí)行該命令 提示說查找不道nginx命令悔橄,則說明你的環(huán)境變量配置的 有問題,需要仔細(xì)查看下配置
nginx -v
啟動Nginx環(huán)境
## 啟動Nginx環(huán)境 該命令必須在你剛才創(chuàng)建的work目錄下執(zhí)行腺毫,否則啟動失敗
nginx -p `pwd`/ -c conf/nginx.conf
訪問 http://192.168.56.105:8080/ 看看瀏覽器是不是顯示 Hello world 癣疟,如果是則說明Nginx搭建成功
整合Lua
在整合之前我們先看下OpenResty
目錄下是否存在 lualib
文件夾,OpenResty
默認(rèn)的安裝路徑是/usr/localhost/openresty
這里面是lua的依賴潮酒,我們編寫腳本時睛挚,需要手動引入這些依賴
首先先定義我們的工程目錄結(jié)構(gòu):
--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
文件的內(nèi)容
-- requestDirect.conf
server {
listen 8080;
server_name _;
location /lua {
default_type 'text/html';
content_by_lua_block {
ngx.say("<p>hello, world</p>")
}
}
}
此時文件就添加完成了,先來測試下是否能啟動成功
## 進(jìn)入到 /home/work 目錄下
cd /home/work
## 編譯 看看能否編譯通過
nginx -t
## 查看端口是否被占用
losf -i:8080
## 刪除進(jìn)程 pid 此處的pid是lsof命令查詢出來的急黎,有幾個就執(zhí)行幾次
kill -9 pid
## 啟動nginx服務(wù)
nginx -p `pwd`/ -c /home/work/conf/nginx.conf
啟動完成之后扎狱,訪問 http://192.168.56.105:8080/lua
就能看到返回的結(jié)果了
項目工程文件
上面是我們測試Nginx是否集成Lua成功的,現(xiàn)在我們將項目工程話勃教,目錄結(jié)構(gòu)依舊跟上面是一樣的淤击,我們將業(yè)務(wù)代碼獨立出來,不跟系統(tǒng)相關(guān)的代碼放在一起故源。
上面還有一點污抬,我們每次更新都需要手動kill掉nginx的進(jìn)程,很麻煩绳军,我們可以使用nginx的 reload方式來重新加載lua的配置
目錄結(jié)構(gòu)如下:
--work
----conf
------nginx.conf
----lua
------requestDirect.lua
--lualib
----*.lua
----*.so
- 按照上述的工程目錄結(jié)構(gòu),我們創(chuàng)建項目需要的文件夾
## /home/work下創(chuàng)建文件 conf文件夾 lua文件夾
cd /home/work
mkdir conf
mkdir lua
## 創(chuàng)建 nginx.conf 和 lua/requestDirect.lua
vi nginx.conf
vi lua/requestDirect.lua
在/home/work/conf/nginx.conf
中添加如下的代碼
-- 注意這里的路徑必須是絕對路徑才行印机,如果是相對路徑,則會直接請求到nginx的安裝路徑下门驾,請求時報找不到對應(yīng)文件的錯誤
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文件
## 進(jìn)入到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示例已經(jīng)完成了奶是,在瀏覽器中訪問 http://192.168.56.105:8080/lua
就可以看到打印的信息了
下篇博文我們將在此基礎(chǔ)上楣责,完成請求定向分發(fā)的功能