下载连接:
nginx:http://nginx.org/en/download.html
http://nginx.org/download/
lua-nginx模块安装文件:https://github.com/openresty/lua-nginx-module/tags
lua-zlib模块安装文件: https://github.com/brimworks/lua-zlib/releases
nginx-devel-kit安装文件:https://github.com/simpl/ngx_devel_kit/tags
zlib:http://www.zlib.net/fossils/
lua:http://www.lua.org/ftp/
==========================================
yum install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make readline-devel gcc gcc-c++ lua-devel
yum install pcre pcre-devel zlib zlib-devel openssl openssl--devel
命令安装:yum install pcre
比如我的是安装的:Package pcre-8.32-17.el7.x86_64 already installed and latest version
安装包安装:
pcre的根目录汇总:./configure && make && make install
==========================================
lua-5.3.5
tar -zxvf lua-5.3.5.tar.gz
cd /root/lua
vim Makefile 把 INSTALL_TOP= /usr/local/ 修改为 INSTALL_TOP=/usr/local/lua
make linux
make test
make install
rm -rf /usr/bin/lua 预先删除已经存在的lua
ln -s /usr/local/lua/bin/lua /usr/bin/lua
ln -s /usr/local/lua/share/lua /usr/share/lua
把 /usr/share/lua 目录中的 空的5.1文件夹 删除
/etc/profile环境变量配置
vim /etc/profile
export LUA_HOME=/usr/local/lua
export PATH=$PATH:$LUA_HOME/bin
source /etc/profile 环境变量生效
lua -v 查看版本号
创建一个 HelloWorld.lua 文件
代码如下 print("Hello World!")
执行以下命令 lua HelloWorld.lua
输出结果为 Hello World!
lua shell:
lua
print("Hello World!")
========================================================
centos 都自带 zlib,命令安装是:yum install zlib zlib-devel
执行 rpm -qa | grep zlib 查看到
zlib-devel-1.2.7-18.el7.x86_64
zlib-1.2.7-18.el7.x86_64
如果没有安装 zlib 可以直接下载安装,但是如果已经自带的话,可以选择卸载自带的zlib
比如在重新编译LNMP,发现linux中很多软件对zlib依存都比较大,但是系统中安装的版本都比较低,如果用yum直接升级的话,安装nginx时候没法指定zlib的目录,所以要编译安装zlib。
编译的话,如果能把系统中已经安装的版本替换掉,这样才是最好的。但是由于在编译过程中,很多工具都对zlib有依存,所以掌握顺序非常必要。
1.tar -zxvf zlib-1.2.9.tar.gz -C /usr/local/src
2.查看一下zlib安装文件 rpm -ql zlib 可以看到libz.so*库文件在/lib64/目录下
[root@node2 ~]# rpm -ql zlib
/usr/lib64/libz.so.1
/usr/lib64/libz.so.1.2.7
/usr/share/doc/zlib-1.2.7
/usr/share/doc/zlib-1.2.7/ChangeLog
/usr/share/doc/zlib-1.2.7/FAQ
/usr/share/doc/zlib-1.2.7/README
3.cd /usr/local/src/zlib
./configure --prefix=/usr/local/zlib --libdir=/lib64/
可以直接加上 --libdir=/lib64/ 直接指定库文件安装位置
4.编译:make
make check
5.卸载自带zli
掌握这个顺序很有必要,如果卸载早了的话,上一步就会提示失败
卸载指令 rpm -e --nodeps zlib,卸载完成之后,发现/lib64/目录下,zlib的库文件 libz.so*没有了
[root@node2 ~]# rpm -ql zlib
rpm: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
6.cd /usr/local/src/zlib
make install 安装zlib,安装完成之后,发现/lib64/目录下,有了zlib的库文件
[root@node2 lib64]# ll libz.so*
lrwxrwxrwx 1 root root 13 Apr 24 18:00 libz.so -> libz.so.1.2.9
lrwxrwxrwx 1 root root 13 Apr 24 18:00 libz.so.1 -> libz.so.1.2.9
-rwxr-xr-x 1 root root 117592 Apr 24 18:00 libz.so.1.2.9
如果zlib安装的是其他版本的话,那么可能会出现 用make install安装zlib,安装完成之后,可以看到/usr/local/zlib/目录下有个lib目录,里面存放的就是zlib的库文件
vim /etc/ld.so.conf,在下面加入一行/usr/local/zlib/lib/,然后保存退出。用ldconfig重新更新一下cache,这时候再用yum等工具,发现运行正常了,至此,zlib就更新成功。
7.ldconfig 刷新下动态链接库
vim /etc/ld.so.conf
include ld.so.conf.d/*.conf
8.这时候再用yum install命令,发现运行正常
========================================================
LuaJIT
是一个利用JIT编译技术把Lua脚本直接编译成机器码由CPU运行
版本:2.0 与 2.1。当前稳定版本为 2.0。
2.1为版本与ngx_lua将有较大性能提升,主要是CloudFlare公司对luajit的捐赠。
FFI库 是LuaJIT中最重要的一个扩展库。
1.它允许从纯Lua代码调用外部C函数,使用C数据结构;
2.就不用再像Lua标准math库一样,编写Lua扩展库;
3.把开发者从开发Lua扩展C库(语言/功能绑定库)的繁重工作中释放出来;
下载LuaJIT:http://luajit.org/download.html
tar -zxvf LuaJIT-2.0.5.tar.gz
方式一:
cd /root/LuaJIT
make install PREFIX=/root/softs/luajit
echo "/root/softs/luajit/lib" > /etc/ld.so.conf.d/usr_local_luajit_lib.conf
ldconfig 刷新下动态链接库
/etc/profile环境变量配置
vim /etc/profile
export LUAJIT_LIB=/root/softs/luajit/lib
export LUAJIT_INC=/root/softs/luajit/include/luajit-2.0
source /etc/profile
方式二:
cd /root/LuaJIT
make PREFIX=/usr/local/luajit
make install PREFIX=/usr/local/luajit
echo "/usr/local/luajit/lib" > /etc/ld.so.conf.d/usr_local_luajit_lib.conf
ldconfig 刷新下动态链接库
/etc/profile环境变量配置
vim /etc/profile
export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
source /etc/profile
创建文件 hello.lua:代码 print("Hello World")
执行lua hello.lua
Lua shell运行:
lua
print("Hello World")
========================================================
openresty-1.13.6.2.tar.gz
下载:https://openresty.org/cn/download.html
安装:http://openresty.org/cn/installation.html
tar -xzvf openresty-1.13.6.2.tar.gz
方式一:
cd /root/openresty
./configure --prefix=/root/softs/openresty
make
sudo make install
方式二:
cd /root/openresty
./configure --prefix=/usr/local/openresty
make
make install
========================================================
单独 nginx 安装
cd /root/nginx
./configure --prefix=/usr/local/nginx
make
make install
========================================================
同时编译安装 nginx 1.8.1、ngx_devel_kit v0.3.1rc1、lua-nginx-module v0.10.14
方式一:
tar -xzvf nginx-1.8.1.tar.gz
tar -xzvf lua-nginx-module-0.10.14.tar.gz
tar -xzvf ngx_devel_kit-0.3.1rc1.tar.gz
cd /root/nginx
./configure --prefix=/root/softs/nginx --add-module=/root/lua-nginx-module --add-module=/root/ngx_devel_kit
make
make install
可以直接用 ldd 命令验证是否链了 libluajit-5.1 这样的 .so 文件,例如:
cd /root/softs/nginx/sbin
ldd nginx | grep lua 得出 libluajit-5.1.so.2 => /root/softs/luajit/lib/libluajit-5.1.so.2 (0x00007fd25016c000)
方式二:
tar -xzvf nginx-1.8.1.tar.gz -C /root
tar -xzvf lua-nginx-module-0.10.14.tar.gz -C /usr/local
tar -xzvf ngx_devel_kit-0.3.1rc1.tar.gz -C /usr/local
cd /root/nginx
./configure --prefix=/usr/local/nginx --add-module=/usr/local/ngx_devel_kit --add-module=/usr/local/lua-nginx-module
make
make install
可以直接用 ldd 命令验证是否链了 libluajit-5.1 这样的 .so 文件,例如:
cd /usr/local/nginx/sbin
ldd nginx | grep lua 得出 libluajit-5.1.so.2 => /usr/local/luajit/lib/libluajit-5.1.so.2 (0x00007f4691db7000)
========================================================
cd /root/softs/nginx/sbin
./nginx
启动时报错:./nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
解决:ln -s /root/softs/luajit/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
ps aux|grep nginx
kill -9 xxx
浏览器:IP 默认80端口(可以不输入80端口) 显示 Welcome to nginx! 表示正常
问题:页面出现 403 Forbidden
分析:查看 /root/softs/nginx/logs/error.log 文件得知 Permission denied
ps aux | grep nginx 发现启动的用户为 nobody
root 113593 0.0 0.0 33064 872 ? Ss 15:30 0:00 nginx: master process ./nginx
nobody 113594 0.0 0.0 33492 1868 ? S 15:30 0:00 nginx: worker process
解决:
将nginx.config的user改为和启动用户一致
vim /root/softs/nginx/conf/nginx.conf
将 #user nobody 改为 user root
问题:nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
分析:当使用非root用户下操作nginx的话,因为Linux只有root用户可以使用1024以下的端口,因此应修改nginx.conf的默认80端口为1024以上的端口号
解决:
vim /home/gzp/softs/nginx/conf/nginx.conf
server
{
listen 2000;
}
========================================================
cd /root/softs/nginx/sbin
./nginx
ps aux|grep nginx
kill -9 xxx
浏览器:IP 默认80端口(可以不输入80端口) 显示 Welcome to nginx! 表示正常
curl http://www.baidu.com
curl http://192.168.88.102:80
vim /root/softs/nginx/conf/nginx.conf
server {
location = /test
{
content_by_lua '
ngx.say("Hello World")
ngx.log(ngx.ERR, "err err err")
'
;
}
}
注意:上面最后结尾的 ' 和 ; 两个符号之间 必须换行
curl http://192.168.88.102:80/test 得出 Hello World
ngx.say 是 lua 显露給模块的接口。类似的有 ngx.log(ngx.DEBUG, “”),可以在error.log输出调试信息。
vim /root/softs/nginx/conf/nginx.conf
server {
location = /lua-version
{
content_by_lua '
if jit then
ngx.say(jit.version)
else
ngx.say(_VERSION)
end
'
;
}
}
注意:上面最后结尾的 ' 和 ; 两个符号之间 必须换行
curl http://192.168.88.102:80/lua-version 得出 LuaJIT 2.0.5
如果使用的是标准 Lua,访问 192.168.88.102:80/lua-version 应当返回响应体 Lua 5.1
如果是 LuaJIT 则应当返回类似 LuaJIT 2.0.5 这样的输出。不要使用标准 Lua,应当使用 LuaJIT, 后者的效率比前者高多了。
vim /root/softs/nginx/conf/nginx.conf
可以调用外部脚本,如同我们写php、jsp应用时,业务脚本单独组织在.php或.jsp文件中一样
server
{
location = /test2
{
content_by_lua_file /root/hello.lua;;
}
}
文件hello.lua内容如下:ngx.say("Hello World")
这里的脚本可以任意复杂,也可以使用Lua 自己的库
curl http://192.168.88.102:80/test2 得出 Hello World
========================================================
安装cmake编译器
yum install -y gcc gcc-c++ make automake
cmake下载:https://cmake.org/files
wget http://www.cmake.org/files/v2.8/cmake-版本号.tar.gz
tar -zxvf cmake-版本号.tar.gz
例如:tar -zxvf cmake-3.14.3.tar.gz
cd /root/cmake
./bootstrap
gmake
gmake install
检查cmake安装:cmake --version
显示 cmake version 3.14.3 表示安装成功
========================================================
方式一:
tar -xzvf lua-zlib-1.2.tar.gz
cd /root/lua-zlib
cmake -DLUA_INCLUDE_DIR=/root/softs/openresty/luajit/include/luajit-2.1
make
cp zlib.so /usr/local/lib
cp zlib.so /root/softs/openresty/lualib
方式二:
tar -xzvf lua-zlib-1.2.tar.gz
cd /root/lua-zlib
cmake -DLUA_INCLUDE_DIR=/usr/local/openresty/luajit/include/luajit-2.1
make
cp zlib.so /usr/local/lib
cp zlib.so /usr/local/openresty/lualib
========================================================
方式一:
cd /root/softs/nginx/sbin
./nginx
ps aux|grep nginx
kill -9 xxx
vim /root/softs/nginx/conf/nginx.conf
可以调用外部脚本,如同我们写php、jsp应用时,业务脚本单独组织在.php或.jsp文件中一样
server
{
location = /test3
{
content_by_lua_file /root/a.lua;
}
}
方式二:
cd /usr/local/nginx/sbin
./nginx
ps aux|grep nginx
kill -9 xxx
vim /usr/local/nginx/conf/nginx.conf
可以调用外部脚本,如同我们写php、jsp应用时,业务脚本单独组织在.php或.jsp文件中一样
server
{
location = /test3
{
content_by_lua_file /root/a.lua;
}
}
curl http://192.168.88.101:80/test3 得出
cd /usr/local/nginx/logs 目录中 可以查看日志文件 access.log、error.log
报错:查看 /usr/local/nginx/logs/error.log 文件得知 cannot open /root/a.lua: Permission denied
ps aux | grep nginx 发现启动的用户为 nobody
root 113593 0.0 0.0 33064 872 ? Ss 15:30 0:00 nginx: master process ./nginx
nobody 113594 0.0 0.0 33492 1868 ? S 15:30 0:00 nginx: worker process
解决:
vim /usr/local/nginx/conf/nginx.conf
把 #user nobody; 修改为 user root;
a.lua
local zip = require 'zlib'
local uncompress = zip.inflate()
local compress = zip.deflate()
local deflated, eof, bytes_in,bytes_out =compress("asdasdasdasdasdasdasdasdasd", 'finish')
print(deflated, eof, bytes_in,bytes_out)
local uss,ret,getin,getout=uncompress(deflated)print(uss,ret,getin,getout)
print(uss,ret,getin,getout)
这里的脚本可以任意复杂,也可以使用Lua 自己的库
b.lua:
local zip = require 'zlib'
local uncompress = zip.inflate()
local compress = zip.deflate()
local deflated, eof, bytes_in,bytes_out =compress("asdasdasdasdasdasdasdasdasd", 'finish')
print(deflated, eof, bytes_in,bytes_out)
local uss,ret,getin,getout=uncompress(deflated)print(uss,ret,getin,getout)
print(uss,ret,getin,getout)