摘要:本文主要介绍如何将lua-nginx-module 编译到nginx主程序中。

nginx是一个高性能的反向代理服务器,lua是一个小巧的脚本语言,利用lua-nginx-module模块可以使用lua处理nginx请求,下面将一步步介绍如何编译带lua-nginx-module的nginx。

1.下载源码

编译带lua-nginx-module模块的nginx,需要用到下面6个源码包。

  1. luajit2-2.1-20201027.tar.gz
  2. lua-nginx-module-0.10.19.tar.gz
  3. lua-resty-core-0.1.21.tar.gz [非必须]
  4. lua-resty-lrucache-0.10.tar.gz [非必须]
  5. nginx-1.19.5.tar.gz
  6. ngx_devel_kit-0.3.1.tar.gz
2. 编译LuaJIT

lua-nginx-module 依赖LuaJIT 2.x,ngx_devel_kit,所以编译带lua-nignx-module模块的nginx之前必须先编译LuaJIT,具体的要求可以看下面官网的说明原文。

1. LuaJIT can be downloaded from the latest release of OpenResty's LuaJIT fork. The official LuaJIT 2.x releases are also supported, although performance will be significantly lower for reasons elaborated above
2. Download the latest version of the ngx_devel_kit (NDK) module HERE
3. Download the latest version of ngx_lua HERE
4. Download the latest supported version of Nginx HERE (See Nginx Compatibility)

解压、编译并安装LuaJIT

sudo tar zxvf luajit2-2.1-20201027.tar.gz
sudo make install PREFIX=/usr/local/LuaJIT

这里指定安装的路径为/usr/local/LuaJIT,如果成功编译将可以看到如下结果:

3. 编译nginx

首先安装nginx必要的依赖pcre pcre-devel zlib zlib-devel openssl-devel:

sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install zlib1g-dev
sudo apt-get install openssl libssl-dev
# 如果是Centos系统,则使用下面的命令
# yum install pcre pcre-devel
# yum install zlib zlib-devel
# yum install openssl-devel

然后解压需要的源码包:

sudo tar zxvf nginx-1.19.5.tar.gz
sudo tar zxvf ngx_devel_kit-0.3.1.tar.gz
sudo tar zxvf lua-nginx-module-0.10.19.tar.gz

编译nginx这里有个坑,官网的说明文档是设置LUAJIT_LIBLUAJIT_INC这两个变量即可,即下面的命令:

 export LUAJIT_LIB=/path/to/luajit/lib
export LUAJIT_INC=/path/to/luajit/include/luajit-2.1

但是实测发现,这个方案并不行,lua-nginx-module的config还是走了auto-discovery的流程,由于上面自己指定了LuaJIT的安装路径,auto-discovery并不能发现LuaJIT,在nginx configure的时候,就会报下面这个错误:

checking for LuaJIT 2.x ... not found
./configure: error: unsupported LuaJIT version; ngx_http_lua_module requires LuaJIT 2.x.

最后无奈,我将这两个变量直接写死在lua-nginx-module的config中,即:

# 直接声明这两个变量
LUAJIT_INC=/usr/local/LuaJIT/include/luajit-2.1
LUAJIT_LIB=/usr/local/LuaJIT/lib ngx_lua_opt_I=
ngx_lua_opt_L=
luajit_ld_opt= ngx_feature_name=
ngx_feature_run=no
ngx_feature_incs=
ngx_feature_test= # 使得config走if流程
if [ -n "$LUAJIT_INC" -o -n "$LUAJIT_LIB" ]; then
....

配置nginx编译选项:

sudo ./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--error-log-path=/usr/local/nginx/logs/error.log \
--with-http_ssl_module \
--with-ld-opt="-Wl,-rpath,/usr/local/LuaJIT/lib" \
--add-module=/usr/local/src/ngx_devel_kit-0.3.1 \
--add-module=/usr/local/src/lua-nginx-module-0.10.19

如果配置成功,将可以看到如下信息:

执行编译:

sudo make

编译成功的话,可以看到如下信息:

安装nginx,配置指定的nginx安装路径为:/usr/local/nginx。

4. 编译lua-resty-core

lua-resty-core 提供了很多api,在使用nginx + lua 开发时用的最多,所以将以这个为例编译nginx lua依赖库,lua-resty-core依赖lua-resty-lrucache模块,所以这两个模块要一起安装:

sudo tar zxvf lua-resty-core-0.1.21.tar.gz
sudo tar zxvf lua-resty-lrucache-0.10.tar.gz cd lua-resty-core-0.1.21
sudo make install PREFIX=/usr/local/LuaLIB
cd ../lua-resty-lrucache-0.10
sudo make install PREFIX=/usr/local/LuaLIB

这里将这两个模块都安装在/usr/local/LuaLIB。

5. 编写lua指令处理nginx请求

nginx编译完成之后就可以使用lua脚本来处理nginx请求了,先上一个Hello World示例,调整nginx.conf:

http {
# 指定lua模块路径,多个之间";"分隔,其中";;"表示默认搜索路径,默认到nginx的根目录下找
lua_package_path "/usr/local/LuaLIB/lib/lua/?.lua;;";
include mime.types;
default_type application/octet-stream; sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
# 使用lua-resty-core输出一个字符串
location /lua {
default_type 'text/html';
content_by_lua 'ngx.say("Hi Lua")';
}
location / {
root html;
index index.html index.htm;
}
}
}

请求/lua可以看到如下效果,就说明nginx + lua-nginx-module编译成功了。

关于更多的 lua-resty-core api可以查看下面官网的文档:

https://github.com/openresty/lua-resty-core

=========================================================

文中用到的源码包可关注公众号 “HiIT青年” 发送 “nginx-lua” 获取。



关注公众号,阅读更多文章。

nginx + lua-nginx-module 编译的更多相关文章

  1. 用lua nginx module搭建一个二维码

    用lua nginx module搭建一个二维码(qr code)生成器 作者 vinoca 發布於 2014年10月31日 如果有VPS,或者开源的路由器,安装一个nginx,添加lua-nginx ...

  2. mac下Nginx+lua模块编译安装

    Nginx的nb之处就不说了,lua也是一个小巧的脚本语言,由标准C编写而成,几乎可以运行在所有的平台上,也非常强大,其他特性请自行度娘.nginx_lua_module是由淘宝的工程师清无(王晓哲) ...

  3. Mac + nginx + lua + luasocket + cjson

    1. Lua // 官方网站 http://www.lua.org/ 下载源码包// 由于配合 nginx 使用, 所以使用 5.1.X 版本 $ .tar.gz $ cd lua- $ make m ...

  4. 基于nginx+lua+redis高性能api应用实践

    基于nginx+lua+redis高性能api应用实践 前言 比较传统的服务端程序(PHP.FAST CGI等),大多都是通过每产生一个请求,都会有一个进程与之相对应,请求处理完毕后相关进程自动释放. ...

  5. 【重要】Nginx模块Lua-Nginx-Module学习笔记(三)Nginx + Lua + Redis 已安装成功(非openresty 方式安装)

    源码地址:https://github.com/Tinywan/Lua-Nginx-Redis 一. 目标 使用Redis做分布式缓存:使用lua API来访问redis缓存:使用nginx向客户端提 ...

  6. Nginx+lua+openresty精简系列

    1. CentOS系统安装openresty 你可以在你的 CentOS 系统中添加 openresty 仓库,这样就可以便于未来安装或更新我们的软件包(通过 yum update 命令).运行下面的 ...

  7. 使用Nginx+Lua代理Hadoop HA

    一.Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个Master组件提供服务,其中正在使用的组件称为Active,另一个作为备份称为Standby,例如HDFS的NameNo ...

  8. nginx+lua

    一场电闪与雷鸣的结合, 公司原有服务器已经配置好nginx,需要重新装载lua模块,哈哈哈,无法无法.   安装LUA模块需要以下 pcre       ftp://ftp.csx.cam.ac.uk ...

  9. nginx+lua实现简单的waf网页防火墙功能

    原文:http://www.2cto.com/net/201608/534272.html 安装LuaJIT http://luajit.org/download/LuaJIT-2.0.4.tar.g ...

  10. OpenResty(nginx+lua) 入门

    OpenResty 官网:http://openresty.org/ OpenResty 是一个nginx和它的各种三方模块的一个打包而成的软件平台.最重要的一点是它将lua/luajit打包了进来, ...

随机推荐

  1. 你不知道的那些js调试命令

    通常情况下,我们在调试js程序的时候一般都使用console.log()来进行程序的调试,打印自己所需要的内容什么的. 那么js的调试命令可不止一个console.log() 分类输出 console ...

  2. 在VirtualBox中调整Raspbian分辨率

    参考自一路阳光随行发表的virtualBox设置虚拟机分辨率大小中ubuntu虚拟机分辨率的设置方法. 启动Raspbian虚拟机,点击 窗口主菜单里的设备->安装增强功能.系统后会自动挂载增强 ...

  3. 基于ArcGIS ModelBuilder的GDB批量分区裁剪——可保留原始GDB要素集要素类结构

    文章版权由作者pxtgis和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/pxtgis/. 一.概述 在数据处理工作中经常遇到批量裁剪ArcGIS文件地理数据库( ...

  4. update和insert

    sprintf(sql, "INSERT lora_net(eui,online) VALUES('%s', 1) ON DUPLICATE KEY UPDATE online=1" ...

  5. 痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(1) - 执行在不同CM内核下

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是超级下载算法开发笔记(1)之执行在不同CM内核下. 文接上篇 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计&g ...

  6. 学习.NET 挑战赛

    今天访问dot.net 网站看到了一个学习.NET 挑战赛,发现已经赛程过半了,这是一个为那些想更多地了解 C# 和 .NET 的人举办的一个完全免费的课程活动,这些模块必须在 11 月底前完成.参加 ...

  7. 微服务接口设计(RESTful规范)

    微服务的接口设计(RESTful规范) 基本知识 URI:在RESTful架构中,每个URI代表一种资源 URI规范: 不用大写 用中杠-,不用下划线_ 路径中不能有动词,只能有名词 名词表示资源集合 ...

  8. 第三方库文件Joi对数据进行验证的方法以及解决Joi.validate is not a function的问题

    Joi:javaScript对象的规则描述语言和验证器 1.npm install joi@14.3.1 2.建立joi.js文件 3.导入第三方包joi const Joi = require('j ...

  9. js匀速运动框架案例

    点击"开始运动"按钮,红色的#red区块开始向右匀速运动,抵达到黑色竖线位置自动停止,再次点击"开始运动"#red区块也不会再运动.同时为了便于后期维护,要求运 ...

  10. InnoDB Insert Buffer(插入缓冲 转)

    一,插入缓冲(Insert Buffer/Change Buffer):提升插入性能 只对于非聚集索引(非唯一)的插入和更新有效,对于每一次的插入不是写到索引页中,而是先判断插入的非聚集索引页是否在缓 ...