生产环境上nginx 不覆盖添加lua模块
2015-06-11 15:24
579 查看
需求如下:
需要在nginx配置文件中判断请求中是否带某参数变量,nginx配置本身没有此判断功能。网上查找资料,可以在nginx中添加lua模块,使用lua的脚本去判断。
比较靠谱的文章:CentOS系统下,如何安装 nginx_lua_module 模块 以及 echo-nginx-module 模块
主要安装:
lua-nginx-module-master
ngx_devel_kit-master
LuaJIT
三个模块,但找了一圈发现都是需要重新编译nginx并且覆盖安装。
再次对比我现有的环境:
阿里云环境,已经安装了nginx
nginx目录下已经没有源码和configuration文件了。
不能覆盖安装,要求保留原有内容
网上Google,让我找到了这篇文章:生产线上的nginx如何添加未编译安装模块
真是欣喜若狂啊,虽然离我真实情况还有些差距,但已经很接近了。
以下就是我的真实操作步骤:
下载 LuaJIT-2.0,编译,安装。我的安装路径为
/usr/local下
之后配置环境变量
[code=language-linux]export LUAJIT_LIB=/usr/local/luajit/lib export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
之后下载lua-nginx-module-master,ngx_devel_kit-master
>nginx_lua_module是由淘宝的工程师清无(王晓哲)和春来(章亦春)所开发的nginx第三方模块,它能将lua语言嵌入到nginx配置中,从而使用lua就极大增强了nginx的能力
ngx_devel_kit-master 是一个拓展nginx服务器核心功能的模块,第三方模块开发可以基于它来快速实现。
解压缩到'/usr/local路径下'文件夹名为
lua-nginx-module和
ngx_devel_kit
关键点来了,使用
/usr/local/nginx/sbin/.nginx -V查看现有nginx的配置和版本号,这是我配置完成之后的信息。
[code=language-linux]nginx version: nginx/1.4.7 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) TLS SNI support enabled configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --with-ld-opt=-Wl,-rpath, --add-module=/usr/local/ngx_devel_kit --add-module=/usr/local/lua-nginx-module --with-http_stub_status_module --with-http_ssl_module --with-pcre --with-http_realip_module --with-http_image_filter_module
这里主要是提醒,记住原有的配置,不要在重新配置时丢失以前的配置项。我的版本是
1.4.7所以去官网下个对应版本的nginx源码。这篇文章Nginx学习笔记(一):Configure命令详解有讲,Configure实际上是调用 auto文件夹中的脚本执行,生成objs文件夹,只要把编译好的nginx覆盖到原有的就好。
开始操作,把
auto和
configure和
src文件夹拷贝到现有的
nginx文件夹下,之后记得在开始编译之前,配置下
[code=language-linux]export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
是为了解决在编译时报的异常
[code=language-linux]/usr/local/nginx/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
执行命令:
[code=language-linux] ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB" --add-module=/usr/local/ngx_devel_kit --add-module=/usr/local/lua-nginx-module +原有的配置命令
make
之后停下nginx服务,将现有的nginx程序备份,将新生产的覆盖,启动 ```linux killall nginx cp ./sbin/nginx ./sbin/nginx.bak cp ./objs/nginx ./sbin/ ./sbin/./nginx
大功告成,现在在配置项中,添加一个测试的配置
[code=language-linxu]location ^~ /lua { content_by_lua 'if ngx.var.变量名 == nil then return ngx.exit(403) end'; }
可以拿模拟器试试了,不带变量时会返回403~~~。
参考文章:
CentOS系统下,如何安装 nginx_lua_module 模块 以及 echo-nginx-module 模块
如何安装nginx_lua_module模块
生产线上的nginx如何添加未编译安装模块
Nginx学习笔记(一):Configure命令详解
相关文章推荐
- Nginx 负载均衡
- nginx-upstream安装配置
- wdcp(nginx)平滑升级到Tengine 教程!无须重启
- Ubuntu nginx+php+mysql的一些问题总结
- elk收集分析nginx access日志
- Linux服务器(CentOS 6.5)Nginx服务器的安装
- Nginx配置文件nginx.conf中文详解
- NGINX、PHP-FPM开机自动启动
- Nginx和PHP-FPM的启动/重启脚本 [转发]
- Centos 6.5 64bit 安装 nginx+php
- nginx+keepalived实现双机热备高可用性
- Nginx RTMP 功能研究
- nginx---X-Accel-Redirect(X-Sendfile)
- Nginx参数详解
- nginx在varnish后端做负载均衡,后端tomca获取客户端真实IP
- Linux环境下安装Nginx+Pcre+OpenSSL
- Nginx最新解析漏洞
- nginx报错:Permission denied
- keepalived+nginx实现nginx的高可用
- Nginx安全配置研究