生产环境上nginx 不覆盖添加lua模块

需求如下:

需要在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
    之后配置环境变量

    export LUAJIT_LIB=/usr/local/luajit/lib
    export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
    
  • 之后下载lua-nginx-module-masterngx_devel_kit-master

    nginx_lua_module是由淘宝的工程师清无(王晓哲)和春来(章亦春)所开发的nginx第三方模块,它能将lua语言嵌入到nginx配置中,从而使用lua就极大增强了nginx的能力

    ngx_devel_kit-master 是一个拓展nginx服务器核心功能的模块,第三方模块开发可以基于它来快速实现。

解压缩到’/usr/local路径下’文件夹名为lua-nginx-modulengx_devel_kit

  • 关键点来了,使用/usr/local/nginx/sbin/.nginx -V查看现有nginx的配置和版本号,这是我配置完成之后的信息。

    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覆盖到原有的就好。
    开始操作,把autoconfiguresrc文件夹拷贝到现有的nginx文件夹下,之后记得在开始编译之前,配置下

    export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
    

    是为了解决在编译时报的异常

    /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
    

    执行命令:
    ```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



- 大功告成,现在在配置项中,添加一个测试的配置

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命令详解

时间: 2024-10-06 09:54:22

生产环境上nginx 不覆盖添加lua模块的相关文章

如何一步步在生产环境上部署django和vue

本文由云+社区发表 本文主要讲述了如何一步步在生产环境上部署django和vue,操作系统默认为centos 说明:后文中出现的以下字符串均表示具体的路径或者名称,含义如下: DJANGO_DIR----表示django的工程根目录 DJANGO_NAME----表示django的工程名称 VUE_HTML_DIR----表示vue编译好的index.html路径 VUE_STATIC_DIR----表示vue编译好的静态文件夹static的路径 整体框架 一个常用的web框架图如下图所示 框架

生产环境上shell的解读

一直以来对shell都不是很熟悉,只停留在基本的linux上操作上,这周因为定位问题接触到了生产环境上的脚本,因此作为引子学习一下.很多命令只是点到,等真正需要独立完成的时候再去学习. 1 #!/bin/sh 2 3 #set -x 打印出调试信息 4 MYNAME=rawload 5 eamid=$2 6 emsentityid=$1 7 WORK_DIR=${PM4H_APP}/module/rawload 8 LOAD_DIR=${PM4H_SPOOL}/${eamid}/${emsent

windows环境下使用apxs编译添加apache模块

windows环境下使用apxs编译添加apache模块 简介说明:本文使用mod_limitipconn模块为例. 环境: windows7 x86系统 apache 2.4.18 目标: 在windows环境下,利用mod_limitipconn0.24源码.apxs为apache2.4.18添加mod_limitipconn模块. 分析: limitipconn模块最新版已经支持apache2.4了.但是没有编译好的对应版本.因此需要自己动手编译模块.在windows下要实现这个目标,需要

生产环境使用Nginx+uwsgi部署Django

在本地运行django应用相对来说还是挺方便的,使用自带的runserver启动即可.如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等 在网上找到了不错的部署的教程,讲解的还是很详细的,我就不重新再整理了. 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上) – Django中国社区五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(下) – Django中国社区 但是作为记录,我还是要记录下部署中遇

生产环境中nginx既做web服务又做反向代理

一.写对于初入博客园的感想 众所周知,nginx是一个高性能的HTTP和反向代理服务器,在以前工作中要么实现http要么做反向代理或者负载均衡.尚未在同一台nginx或者集群上同时既实现HTTP又实现反向代理. 那么到底nginx能否既实现HTTP又实现反向代理呢? 答案是肯定的 刚好前段时间在实际项目中有一个类似的情况出现,由此与大伙分享,由于以前没有写博文的习惯,只习惯于自己记录操作实现步骤及稳定,在以前常遇见问题都是百度.谷歌,众位网友的博文帮助自己见解决了很多问题. 由此可见技术分享的重

CentOS7.1下生产环境Keepalived+Nginx配置

注:下文涉及到配置的,如无特别说明,主备机则一致! 一.环境介绍 1.这是我CentOS的版本,CentOS7.1,主备都为该版本 [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core) [[email protected] ~]# cat /proc/version Linux version 3.10.0-229.el7.x86_64 ([email protected]) (gc

Linux生产环境上,最常用的一套“vim“技巧

引子 研发线上使用最多的编辑器,就是vi.无论是最快查看某个文件内容,还是快速编辑某个文件,vi都能帮上忙. 软件世界貌似有一些非常长寿的东西,vi算是一个.本篇文章聚焦的是研发线上最常用的一些功能.至于安装插件,写一些脚本,那一般是在开发机上玩的,生产环境没有条件.也没有时间忍受你做这些增强.希望看完本文,能够对这款神器有一个大体印象.当然,熟练的使用还需要日常有意识的培养. vim是vi的增强版,一般现代linux都不缺那几兆空间,所以预装的都是增强版,本文默认使用vim. 养成习惯 vim

iOS中远程推送实现—在Apple的生产环境上测试Push Notifications功能

1.在“Provisioning Profiles”中点击“Add”按钮. 2.在“What type of provisioning profile do you need?”页面中选择“Distribution”下的“Ad Hoc”,点击“Continue”按钮,如下图 3.在“Select App ID.”页面,选择“App ID”,点击“Continue”按钮. 4.在“Select certificates.”页面中,选中证书,点击“Continue”按钮. 5.在“Select de

nginx重新编译添加新模块

找到安装nginx的源码根目录,如果没有的话下载新的源码 http://nginx.org tar xvzf nginx-1.3.2.tar.gz 查看ngixn版本极其编译参数 /usr/local/nginx/sbin/nginx -V 进入nginx源码目录 cd nginx-1.3.2 以下是重新编译的代码和模块 ./configure --prefix=/usr/local/nginx--with-http_stub_status_module --with-http_ssl_modu