nginx、Lua、LuaJIT、openresty、lua-nginx-module、ngx_devel_kit 的安装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zimiao552147572/article/details/89533018

下载连接:

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)
            
 

猜你喜欢

转载自blog.csdn.net/zimiao552147572/article/details/89533018
今日推荐