Nginx编译安装lua-nginx-module
lua-nginx-module 模块可以将Lua的强大功能嵌入NGINX服务器。
下载Nginx源码
如果已安装Nginx,需要查看当前安装版本的编译参数:
$ /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.12.2
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: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-pcre
其中configure arguments这个参数是非常重要的,我们在后面安装Lua模块的时候,需要以这个为基础,增加新的参数。
如果还没有安装Nginx,上面可以忽略。
Nginx下载页面:http://nginx.org/en/download.html
这里我们以 nginx/1.12.2 为例。需要获取源码:
$ cd /opt/
$ wget http://nginx.org/download/nginx-1.12.2.tar.gz
$ tar -zxvf nginx-1.12.2.tar.gz
安装lua-nginx-module
需要先安装LuaJIT,并依赖ngx_devel_kit。
安装LuaJIT
LuaJIT官网:http://luajit.org/ 。
我们安装最新稳定版(截止到2018-12-23):
$ wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
$ tar -zxvf LuaJIT-2.0.5.tar.gz
$ cd LuaJIT-2.0.5
$ make install PREFIX=/usr/local/LuaJIT
安装成功最后一行输出会提示:
==== Successfully installed LuaJIT 2.0.5 to /usr/local/LuaJIT ====
/etc/profile 文件末尾加入环境变量:
export LUAJIT_LIB=/usr/local/LuaJIT/lib
export LUAJIT_INC=/usr/local/LuaJIT/include/luajit-2.0
然后:
$ source /etc/profile
安装ngx_devel_kit
项目地址:https://github.com/simplresty/ngx_devel_kit
下载并解压,不需要安装:
$ cd /opt/
$ wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz
$ tar zxvf v0.3.0.tar.gz
$ ls | grep ngx_devel_kit
ngx_devel_kit-0.3.0
安装lua-nginx-module
项目地址:https://github.com/openresty/lua-nginx-module
下载并解压,不需要安装:
$ cd /opt/
$ wget https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gz
$ tar zxvf v0.10.13.tar.gz
$ ls | grep lua-nginx
lua-nginx-module-0.10.13
编译Nginx
需要安装pcre依赖库
$ yum install readline-devel pcre-devel openssl-devel
Nginx编译参数配置:
$ cd /opt/nginx-1.12.2/
$ ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-pcre --with-ld-opt=-Wl,-rpath,/usr/local/LuaJIT/lib --add-module=/opt/ngx_devel_kit-0.3.0 --add-module=/opt/lua-nginx-module-0.10.13
这里因为已经安装了Nginx,所以这里的参数是从Nginx -V的输出里获取的,并追加了新的参数:
--with-ld-opt=-Wl,-rpath,/usr/local/LuaJIT/lib --add-module=/opt/ngx_devel_kit-0.3.0 --add-module=/opt/lua-nginx-module-0.10.13
运行上面的./configure后进行编译安装:
$ make -j2
$ make install
make install后,会覆盖之前安装的Nginx。
测试lua-nginx-module
在/usr/local/nginx/conf/nginx.conf中server代码块里加入如下代码:
location /hello {
default_type 'text/plain';
return 200 'hello echo!';
}
location /hello_lua {
default_type 'text/plain';
content_by_lua 'ngx.say("hello, lua!")';
}
注意:重新编译 Nginx 二进制,Nginx 需要停止重启。而普通配置更新则 reload 即可:
$ kill -QUIT `cat /usr/local/nginx/logs/nginx.pid` && /usr/local/nginx/sbin/nginx
如果支持service nginx restart,则可以这样重新启动:
$ service nginx restart && /usr/local/nginx/sbin/nginx -s reload
然后curl测试:
$ curl http://127.0.0.1/hello
hello echo!
$ curl http://127.0.0.1/hello_lua
hello, lua!
防盗版声明:本文系原创文章,发布于公众号飞鸿影的博客(fhyblog)及博客园,转载需作者同意。
编译动态模块
lua-nginx-module 支持以动态模块方式加载,详见:https://github.com/openresty/lua-nginx-module#building-as-a-dynamic-module 。Nginx版本需要 >=1.9.11 。
$ cd /opt/nginx-1.12.2/
$ ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-pcre --with-ld-opt=-Wl,-rpath,/usr/local/LuaJIT/lib --add-dynamic-module=/opt/ngx_devel_kit-0.3.0 --add-dynamic-module=/opt/lua-nginx-module-0.10.13
$ make -j2
$ make install
相比静态编译,参数--add-module改成了--add-dynamic-module。
编译成功后,会把模块安装在nginx/modules/目录。查看:
$ ls /usr/local/nginx/modules/
ndk_http_module.so ngx_http_lua_module.so
接下来我们需要在nginx.conf配置中加入以下两行,实现动态调用模块:
load_module /usr/local/nginx/modules/ndk_http_module.so;
load_module /usr/local/nginx/modules/ngx_http_lua_module.so;
注意:
load_module指令不能放在http{}里面:
worker_processes 1;
load_module xxx;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
}
接下来可以按上面的 测试lua-nginx-module 小节测试。唯一不同的是无需使用kill -QUIT退出Nginx,直接使用nginx -s reload热重启就行了。
关于Nginx编译动态模块
NGINX 从 1.9.11 版本起,引入了一个新的模块加载方式:动态加载。这意味着模块可以根据配置文件,在 NGINX 运行时动态的加载。同样,也可以通过修改配置文件然后 Reload NGINX 来卸载模块。从此不再需要替换nginx文件即可增加第三方扩展。
如果是相同机器,可以直接把已编译好的so文件复制到另外一台机器,直接修改nginx.conf即可载入相应模块,这样可以节省编译时间及可能产生的问题。
注意:不是所有模块都可以转换成动态模块。目前官方只有几个模块支持动态加载,第三方模块需要升级支持才可编译成模块:
$ ./configure --help | grep dynamic
--with-http_xslt_module=dynamic enable dynamic ngx_http_xslt_module
--with-http_image_filter_module=dynamic
enable dynamic ngx_http_image_filter_module
--with-http_geoip_module=dynamic enable dynamic ngx_http_geoip_module
--with-http_perl_module=dynamic enable dynamic ngx_http_perl_module
--with-mail=dynamic enable dynamic POP3/IMAP4/SMTP proxy module
--with-stream=dynamic enable dynamic TCP/UDP proxy module
--with-stream_geoip_module=dynamic enable dynamic ngx_stream_geoip_module
--add-dynamic-module=PATH enable dynamic external module
--with-compat dynamic modules compatibility
模块API对于静态模块和动态模块是一致的,但是 config 文件和编译方法略微不同。详见:https://gist.github.com/undirectlookable/2a39cc85b16e2218f162#file-nginx_static_to_dynamic_modules-zh-cn-md
参考
1、Nginx编译安装Lua模块遇到的大坑 - 刘信坚的博客 - CSDN博客
https://blog.csdn.net/qq_38974634/article/details/81625075
2、Nginx安装lua-nginx-module模块 - 微信-大数据从业者 - 博客园
https://www.cnblogs.com/felixzh/p/8709201.html
3、nginx启动、重启、重新加载配置文件和平滑升级 - 蝈蝈的博客 - CSDN博客
https://blog.csdn.net/gnail_oug/article/details/52754491
4、[译] NGINX - 将静态模块转换为动态模块
https://gist.github.com/undirectlookable/2a39cc85b16e2218f162
5、How to Compile Dynamic Modules for NGINX Plus
https://www.nginx.com/blog/compiling-dynamic-modules-nginx-plus/
6、Nginx 添加nginx_lua_module模块 | 封尘网
https://www.58jb.com/html/182.html
7、NGINX 加载动态模块(NGINX 1.9.11开始增加加载动态模块支持) - Tinywan - 博客园
https://www.cnblogs.com/tinywan/p/6965467.html
Nginx编译安装lua-nginx-module的更多相关文章
- nginx编译安装
Nginx编译安装 1.nginx官网:http://wiki.nginx.org/Install下载:http://nginx.org/en/download.html 2.编译安装# wget h ...
- nginx编译安装支持lua脚本
一.准备编译环境 1.操作系统:CentOS7.6 2.安装编译所需安装包 yum install gcc pcre pcre-devel zlib zlib-devel openssl openss ...
- Nginx编译安装第三方模块http_substitutions_filter_module2222
Nginx编译安装第三方模块http_substitutions_filter_module Rming -- 阅读 安装 Http 编译 module filter nginx 模块 >> ...
- Nginx编译安装第三方模块http_substitutions_filter_module
Nginx编译安装第三方模块http_substitutions_filter_module 分类:服务器技术 作者:rming 时间:-- . >>ngx_http_substitu ...
- 在 CentOS7最小化 下的编译安装:Nginx 1.5.2 + PHP 5.5.7 + MySQL 5.6.10
1.安装Nginx: 安装包目录 mkdir -p /Data/tgzcd /Data/tgz 安装编译依赖 yum install wget yum install pcre yum install ...
- LNMP平台搭建之一:nginx编译安装
参考博客:https://www.cnblogs.com/zhang-shijie/p/5294162.html jack.zhang 一.环境说明 系统环境:centos6.5 [root@lo ...
- Nginx编译安装:
第三方模块 在nginx.org -------- wiki 找 --add-module= 添加 Nginx编译安装: 安装开发环境 ]# yum groupinstall " ...
- Nginx之编译安装的nginx加入systemctl
编译安装的nginx需要添加rc.local 编译安装后设置 /usr/lib/systemd/system/nginx.service [Unit] Description=nginx After= ...
- [nginx]编译安装及安全优化
nginx配置-最后整理版 nginx_upstream_check_module nginx-module-vts nginx打补丁 nginx编译安装 - 下载 cd /usr/local/src ...
随机推荐
- 字符串、数组、对象常用API
常用的字符串API 1.常见方法和属性 length 属性,获取字符串的字符数量 charAt(i) 返回给定位置的字符 charCodeAt( ) 返回给定位置的字符的字符编码 <scrip ...
- 织梦dedecms后台文章搜索关键字,关键字包含文章内容的代码修改
1.织梦dedecms后台文章搜索功能在哪里找?织梦dedecms后台-->核心-->常用操作-->所有档案列表(或)织梦dedecms后台-->核心-->内容管理--& ...
- 计算机爱好者协会技术贴markdown第四期
首先先让爱酱用CSDN自带的数学公式方法来闪瞎大家的钛合金狗眼: 有没有感觉到Markdown的强大!!!!! ## KaTeX数学公式 您可以使用渲染LaTeX数学表达式 [KaTeX](https ...
- 第49章:MongoDB-数据导入导出
①导出工具mongoexport Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件.可以通过参数指定导出的数据项,也可以根据指定的条件导出 ...
- python之路(七)-递归算法
递归 特点 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 递归算法解决问题的特点: (1) 递归就是在 ...
- python读取文件时提示"UnicodeDecodeError: 'gbk' codec can't decode
解决办法1. FILE_OBJECT= open('order.log','r', encoding='UTF-8') 解决办法2. FILE_OBJECT= open('order.log','rb ...
- sqlserver 多行转一行
sql 例子: SELECT STUFF((SELECT ',' + CONVERT(VARCHAR, b.SCsinfoSourceId) FROM PZDataCsinfo b WHERE b.D ...
- SSH连接Linux操作:
Centos6.5的操作: 1:需要下载一个Xshell连接工具: 2:在Linux输入ifconfig,查看IP地址, 3:使用Xshell连接 Ubuntu的操作: 1:需要下载一个Xshell连 ...
- 推导正交投影(Orthographic Projection)
定义六个面 left right bottom top near far 然后三个轴分开考虑 x轴 视椎体的x范围在[l,r],我们要变换到[-1,1] 1 减去l变换到[0, r-l] 2 乘以 ...
- linux 值安装yum包
1. 创建文件,挂载 rhel7-repo-iso [root@rhel7 ~]# mkdir /media/rhel7-repo-iso [root@rhel7 ~]# mount /dev/cd ...