1. 程式人生 > >非openresty方式安裝Nginx + Lua + Redis 環境

非openresty方式安裝Nginx + Lua + Redis 環境

nginx+lua+redis

一、功能實現介紹:

使用Redis做分布式緩存;使用lua API來訪問redis緩存;使用nginx向客戶端提供服務,ngx_lua將lua嵌入到nginx,讓nginx執行lua腳本,高並發,非阻塞的處理各種請求。url請求nginx服務器,然後lua查詢redis,返回json數據。

二、服務器環境介紹:

系統:CentOS release 6.8 (Final) x86_64位 最小化安裝
服務器型號:PowerEdge R630 磁盤是ssd盤
服務器上已存在服務: 是一件安裝包lnmp環境
服務版本:nginx/1.10.0 PHP/5.5.36 mysql/5.6.20
lnmp一鍵安裝包下的nginx編譯安裝的模塊如下:

[root@localhost ~]# nginx -V
nginx version: nginx/1.10.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module

三、編譯安裝前先下載相關的nginx第三方模塊並且yum安裝相關的依賴包:

yum -y install pcre pcre-devel openssl openssl-devel lua-devel

下載相關的nginx第三方模塊:
3.1.模塊存放目錄:/opt/soft
3.2.下載相關的軟件包和模塊

3.2.1下載ngx_devel_kit

(NDK(nginx development kit)模塊,是一個拓展nginx服務器核心功能的模塊,第三方模塊開發可以基於它來快速實現。

 cd /opt/soft   -C /opt
wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
tar xf v0.3.0.tar.gz   -C /opt

3.2.2 下載lua-nginx-module模塊

可在 Nginx 中嵌入 Lua 語言,讓 Nginx 可以支持 Lua 強大的語法。

cd /opt/soft
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.7.tar.gz
tar xf v0.10.7.tar.gz   -C /opt 

3.2.3redis2-nginx-module下載

是一個支持 Redis 2.0 協議的 Nginx upstream 模塊,它可以讓 Nginx 以非阻塞方式直接防問遠方的 Redis 服務,同時支持 TCP 協議和 Unix Domain Socket 模式,並且可以啟用強大的 Redis 連接池功能。

cd /opt/soft
wget https://github.com/openresty/redis2-nginx-module/archive/v0.13.tar.gz
tar  xf v0.13.tar.gz   -C /opt

3.2.4set-misc-nginx-module下載

是標準的HttpRewriteModule指令的擴展,提供更多的功能,如URI轉義與非轉義、JSON引述,Hexadecimal、MD5、SHA1、Base32、Base64編碼與解碼、隨機數等等

cd /opt/soft
wget https://github.com/openresty/set-misc-nginx-module/archive/v0.31.tar.gz
tar  xf v0.31.tar.gz   -C /opt 

3.2.5echo-nginx-module下載

是一個 Nginx 模塊,提供直接在 Nginx 配置使用包括 "echo", "sleep", "time" 等指令。

cd /opt/soft
wget https://github.com/openresty/echo-nginx-module/archive/v0.60.tar.gz
tar xf v0.60.tar.gz  -C /opt 

3.2.6Nginx下載

cd /opt/soft
wget http://nginx.org/download/nginx-1.10.0.tar.gz
tar xf nginx-1.10.0.tar.gz -C /opt

3.3.8pcre-8.40.tar.gz下載

如果 服務器沒有安裝pcre,在編譯完nginx後執行make install時會報錯,所以要在編譯nginx時,提前編譯安裝好pcre-8.40.tar.gz

 cd /opt/soft
https://netix.dl.sourceforge.net/project/pcre/pcre/8.40/pcre-8.40.tar.gz
tar xf pcre-8.40.tar.gz  -C /opt/

3.3.9redis-3.2.8.tar.gz下載並編譯安裝完成

四.安裝軟件:

4.1查看所有下載完的包

[root@localhost vhost]# ll /opt/soft/
總用量 306328
-rw-r--r--  1 root root    847615 5月  15 2015 LuaJIT-2.0.4.tar.gz
-rw-r--r--  1 root root    908954 4月  26 2016 nginx-1.10.0.tar.gz
-rw-r--r--  1 root root   2065161 1月  22 2017 pcre-8.40.tar.gz
-rw-r--r--  1 root root   1547237 2月  12 2017 redis-3.2.8.tar.gz
-rw-r--r--  1 root root    605171 6月   1 10:19 v0.10.7.tar.gz
-rw-r--r--  1 root root     27259 6月   1 10:19 v0.13.tar.gz
-rw-r--r--  1 root root     66455 6月   1 10:18 v0.3.0.tar.gz
-rw-r--r--  1 root root     29359 6月   1 10:20 v0.31.tar.gz
-rw-r--r--  1 root root     52771 6月   1 10:20 v0.60.tar.gz

安裝包解壓後的路徑:
[root@localhost opt]# ll /opt/

總用量 7416
drwxrwxr-x   5 root root    4096 7月   1 2016 echo-nginx-module-0.60
drwxr-xr-x   6 1000 1000    4096 5月  15 2015 LuaJIT-2.0.4
drwxrwxr-x  10 root root    4096 11月  5 2016 lua-nginx-module-0.10.7
drwxr-xr-x   9 1001 1001    4096 6月   1 10:42 nginx-1.10.0
-rwxr-xr-x   1 root root 6302513 6月   1 09:54 nginx.bak
drwxrwxr-x   9 root root    4096 5月  10 2016 ngx_devel_kit-0.3.0
drwxr-xr-x   9 1169 1169   12288 6月   1 10:59 pcre-8.40
drwxrwxr-x   6 root root    4096 5月  16 2016 redis2-nginx-module-0.13
drwxrwxr-x   6 root root    4096 2月  12 2017 redis-3.2.8
drwxrwxr-x   5 root root    4096 8月  16 2016 set-misc-nginx-module-0.31
drwxr-xr-x   2 root root    4096 6月   1 10:53 soft
[root@localhost opt]# 

4.2安裝luajit:

cd /opt/soft
wget  http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar xf  LuaJIT-2.0.4.tar.gz  -C /opt/
cd  /opt/LuaJIT-2.0.4
make &&  make install PREFIX=/usr/local/luajit  
cp /usr/local/luajit/bin/luajit-2.0.4 /usr/local/bin/luajit 

下面需要配置一下 luajit的環境變量(Nginx編譯時需要)

[root@localhost bin]# tail -2 /etc/profile
export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
[root@localhost bin]# source /etc/profile

4.3是安裝pcre:

cd /opt/soft
wget    https://netix.dl.sourceforge.net/project/pcre/pcre/8.40/pcre-8.40.tar.gz
tar -zxvf   pcre-8.40.tar.gz -C  /opt/
cd pcre-8.40
./configure
make
make install

4.4編譯安裝nginx:

[root@localhost bin]# cd /opt/nginx-1.10.0/
./configure  --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module  --with-http_addition_module --with-http_realip_module  --with-pcre=/opt/pcre-8.40  --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB" --add-module=../ngx_devel_kit-0.3.0 --add-module=../echo-nginx-module-0.60 --add-module=../lua-nginx-module-0.10.7 --add-module=../redis2-nginx-module-0.13 --add-module=../set-misc-nginx-module-0.31
make -j2 
make install  ####切記在make install 之前一定記得把原來 /usr/local/nginx/sbin/nginx 的nginx做備份

4.5安裝lua-redis-parser

lua-resty-redis是openresty(1.9.15.1)的一個組件,簡單來說,它提供一個lua語言版的redis API,使用socket(lua sock)和redis通信。
下載源碼包:

cd /opt
git clone https://github.com/openresty/lua-resty-redis.git
mkdir  /usr/local/nginx/lua/  -p 
移動該源碼包到/usr/local/nginx/lua/ 這裏去
mv lua-resty-redis /usr/local/nginx/lua/

把lua_package_path "/usr/local/nginx/lua/lua-resty-redis/lib/?.lua;;"; 加入到 nginx.conf配置文件

[root@localhost opt]# grep lua_package_path /usr/local/nginx/conf/nginx.conf
        lua_package_path "/usr/local/nginx/lua/lua-resty-redis/lib/?.lua;;";

到此處,環境已經部署完成,小夥伴們期待接下來的演示吧

五、常見的誤區解釋說明

5.1redis2-nginx-module和lua-resty-redis

redis2-nginx-module是一個openresty(1.9.15.1)自帶的模塊。它能夠把請求轉發給upstream(redis2_pass)。註意它和lua-resty-redis不同,lua-resty-redis是一個lua語言版的redis API,使用socket(lua sock)和redis通信。而redis2-nginx-module是把請求轉發給別的upstream。

5.2編譯安裝報錯之一:

objs/addon/src/ngx_http_lua_regex.o: In function `ngx_http_lua_regex_free_study_data‘:
/opt/nginx-1.10.0/../lua-nginx-module-0.10.7/src/ngx_http_lua_regex.c:1959: undefined reference to `pcre_free_study‘
objs/addon/src/ngx_http_lua_regex.o: In function `ngx_http_lua_ffi_destroy_regex‘:
/opt/nginx-1.10.0/../lua-nginx-module-0.10.7/src/ngx_http_lua_regex.c:2353: undefined reference to `pcre_free_study‘
collect2: ld 返回 1
make[1]: *** [objs/nginx] 錯誤 1
make[1]: Leaving directory `/opt/nginx-1.10.0‘
make: *** [build] 錯誤 2

解決問題參考地址:
https://www.ctolib.com/topics-100588.html

於是安裝pcre
wget    https://netix.dl.sourceforge.net/project/pcre/pcre/8.40/pcre-8.40.tar.gz
tar -zxvf   pcre-8.40.tar.gz
cd pcre-8.40
./configure
make
make install

重新編譯安裝nginx,問題解決

非openresty方式安裝Nginx + Lua + Redis 環境