动态扩展Nginx支持Lua功能
admin
2023-03-24 18:01:55
0

一、Lua说明:


 Lua 是一个简洁、轻量、可扩展的脚本语言,也是号称性能最高的脚本语言,用在很多需要性能的地方,比如:游戏脚本,nginx,wireshark的脚本,当你把他的源码下下来编译后,你会发现解释器居然不到200k,非常变态。很多应用程序使用Lua作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。


二、实验环境:

 

 192.168.1.194服务器(centos 6.5 final版本)

 nginx版本:nginx-1.6.1


三、安装配置:


 这里假定已经安装好了nginx(安装nginx比较简单,网上案例很多),下面开始动态编译扩展nginx使其支持lua脚本。


  • 下载并安装luajit(lua即时编译器)

# wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz 
# tar zxvf LuaJIT-2.0.2.tar.gz
# cd LuaJIT-2.0.2
# make 
# make install


  • 下载lua-nginx-module模块和ngx_devel_kit(nginx开发工具)到nginx的同级目录解压

#wget https://codeload.github.com/openresty/lua-nginx-module/zip/v0.10.1 -o lua-nginx-module-0.10.1.zip
#unzip lua-nginx-module-0.10.1.zip

#wget -o ngx_devel_kit-0.2.18.tar.gz https://github.com/simpl/ngx_devel_kit/archive/v0.2.18.tar.gz 
#tar zxvf ngx_devel_kit-0.2.18.tar.gz


  • nginx -V可以查看nginx的版本,以及之前编译的项目。

# /usr/local/apps/nginx/sbin/nginx -V

nginx version: nginx/1.6.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 
TLS SNI support enabled
configure arguments: --prefix=/usr/local/apps/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-pcre=/home/workspace/auto_deploy/software/nginx/pcre-8.30 --with-openssl=/home/workspace/auto_deploy/software/nginx/openssl-1.0.1i --add-module=../gnosek-nginx-upstream-fair-a18b409/ --add-module=../ngx_cache_purge-2.1 --with-http_ssl_module


  • 要想nginx支持lua,有两种方法:

    • 方法a、使用luajit即时编译器

# export LUAJIT_LIB=/usr/local/lib 
# export LUAJIT_INC=/usr/local/include/luajit-2.0 
# ./configure --prefix=/usr/local/apps/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-pcre=/home/workspace/auto_deploy/software/nginx/pcre-8.30 --with-openssl=/home/workspace/auto_deploy/software/nginx/openssl-1.0.1i --add-module=../gnosek-nginx-upstream-fair-a18b409/ --add-module=../ngx_cache_purge-2.1 --with-http_ssl_module --add-module=../lua-nginx-module-0.10.1/ --add-module=../ngx_devel_kit-0.2.18/
# make -j 4 
# make install 
# echo '/usr/local/lib' >> /etc/ld.so.conf.d/lua.conf 
# ldconfig


    • 方法b、使用lua编译器


# export LUA_LIB=/usr/lib64 
# export LUA_INC=/usr/include 
# ./configure --prefix=/usr/local/apps/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-pcre=/home/workspace/auto_deploy/software/nginx/pcre-8.30 --with-openssl=/home/workspace/auto_deploy/software/nginx/openssl-1.0.1i --add-module=../gnosek-nginx-upstream-fair-a18b409/ --add-module=../ngx_cache_purge-2.1 --with-http_ssl_module --add-module=../lua-nginx-module-0.10.1/ --add-module=../ngx_devel_kit-0.2.18/
# make -j 4 
# make install


    注意:让nginx支持lua,有两种方法,一是使用luajit即时编译器,二是使用lua编译器。推荐使用luajit,因为效率高。

 编译安装好,nginx就可以支持lua脚本了。

 再用nginx -V看一下nginx支持的模块

# /usr/local/rktsapps/nginx/sbin/nginx -V

nginx version: nginx/1.6.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 
TLS SNI support enabled
configure arguments: --prefix=/usr/local/apps/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-pcre=/home/workspace/auto_deploy/software/nginx/pcre-8.30 --with-openssl=/home/workspace/auto_deploy/software/nginx/openssl-1.0.1i --add-module=../gnosek-nginx-upstream-fair-a18b409/ --add-module=../ngx_cache_purge-2.1 --with-http_ssl_module --add-module=../lua-nginx-module-0.10.1/ --add-module=../ngx_devel_kit-0.2.18/

 可以看到我们新增加的两个模块,已经被编译进nginx里面去了。


四、验证配置指令和输出

 修改nginx.conf配置文件,加入下面指令:

location / { 
    content_by_lua 'ngx.say("hello world!")'; 
}

 重启nginx,用curl测试

# curl -i localhost

 结果为:

HTTP/1.1 200 OK 
Server: nginx/1.4.1 
Date: Tue, 24 Sep 2013 23:23:58 GMT 
Content-Type: application/octet-stream
Transfer-Encoding: chunked 
Connection: keep-alive 
hello world!


五、安装遇到的问题:

 

    错误提示:

make[1]: *** [/apps/lib/openssl-1.0.1i/.openssl/include/openssl/ssl.h] Error 2


 修改nginx源代码里面的一个文件内容。

# vim nginx-1.6.1/auto/lib/openssl/conf
CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
CORE_LIBS="$CORE_LIBS $NGX_LIBDL"

 替换成

CORE_INCS="$CORE_INCS $OPENSSL/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
CORE_LIBS="$CORE_LIBS $NGX_LIBDL"

 

 重新编译安装即可!!!



 推荐阅读:

  • 玩转 Nginx 之:使用 Lua 扩展 Nginx 功能

  • 让Nginx支持Lua

相关内容

热门资讯

特朗普下令不打了,美国的“余粮... 可以说戛然而止,快得让很多人都无法适应。前两周,每一天美国都要打击伊朗一通。就在7月24日白宫会议前...
穆杰塔巴最新表态:支持黎真主党 △伊朗最高领袖穆杰塔巴·哈梅内伊(资料图)当地时间7月26日晚,伊朗最高领袖穆杰塔巴·哈梅内伊对黎巴...
美军瘫痪一艘驶向伊朗的油轮,特... 美国总统特朗普虽下令暂停打击伊朗,但美军仍在执行对霍尔木兹海峡的封锁任务。针对美军瘫痪一艘驶向伊朗油...
“小牌大耍”的底气到底是哪里来... 澎湃首席评论员 李平这两天,“艺人李权哲乘高铁占座事件”在网上引发热议,该艺人参加的活动主办方曾发布...
越南籍船舶南海遇险沉没,中方已... 据凤凰卫视报道,一艘越南船舶7月24日夜间在越南庆和以东220海里附近遇险沉没,船上共62名越南籍人...
李权哲占座、蒙面、装死:娱乐圈... 你买了一张高铁一等座的票,找到自己的位置,18A。有人坐着。你拿出手机看了眼购票记录——没错,18A...
杭州景区咖啡店闯入1条幼蛇,仅... 夏天气温高、湿度大,蛇类活动进入高峰期,千万别被“小蛇无害”的刻板印象骗了!有些幼蛇看着迷你可爱,实...
AI开源公开信签署企业增至50... IT之家 7 月 26 日消息,英伟达、微软、IBM、Meta 等 25 家美国科技企业本周(7 月...
南阳快手短视频代运营企业的服务... 在短视频平台快速发展的背景下,企业通过快手等渠道进行内容运营已成为常见的市场动作。对于希望借助短视频...
普通人该如何跟上科技发展的步伐 这个被称作科技的词汇, 听起来既有宏大之感, 又颇为遥远, 好似仅仅归属于在实验室里专心致志钻研的科...