Nginx配置Lua模块

前言
Nginx与Lua编写脚本的基本构建块是指令。指令用于指定何时运行用户Lua代码以及如何使用结果。下面是显示指令执行顺序的图。
c22681c4b997a6805736613e23153075.png
原理:
    ngx_lua将Lua嵌入Nginx,可以让Nginx执行Lua脚本,并且高并发、非阻塞的处理各种请求。Lua内建协程,这样就可以很好的将异步回调转换成顺序调用的形式。
    ngx_lua在Lua中进行的IO操作都会委托给Nginx的事件模型,从而实现非阻塞调用。开发者可以采用串行的方式编写程序,ngx_lua会自动的在进行阻塞的IO操作时中断,保存上下文;然后将IO操作委托给Nginx事件处理机制,在IO操作完成后,ngx_lua会恢复上下文,程序继续执行,这些操作都是对用户程序透明的。
     每个NginxWorker进程持有一个Lua解释器或者LuaJIT实例,被这个Worker处理的所有请求共享这个实例。每个请求的Context会被Lua轻量级的协程分割,从而保证各个请求是独立的。
    ngx_lua采用“one-coroutine-per-request”的处理模型,对于每个用户请求,ngx_lua会唤醒一个协程用于执行用户代码处理请求,当请求处理完成这个协程会被销毁。每个协程都有一个独立的全局环境(变量空间),继承于全局共享的、只读的“comman data”。
     所以,被用户代码注入全局空间的任何变量都不会影响其他请求的处理,并且这些变量在请求处理完成后会被释放,这样就保证所有的用户代码都运行在一个“sandbox”(沙箱),这个沙箱与请求具有相同的生命周期。
     得益于Lua协程的支持,ngx_lua在处理10000个并发请求时只需要很少的内存。根据测试,ngx_lua处理每个请求只需要2KB的内存,如果使用LuaJIT则会更少。所以ngx_lua非常适合用于实现可扩展的、高并发的服务。

1. 安装解压lua
  #安装至/usr/local

wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
tar -zxvf LuaJIT-2.0.5.tar.gz

0b7e6910baba44b2278f8ec726a084a5.png

2.进入该目录执行安装命令
     

cd LuaJIT-2.0.5
make && make install PREFIX=/usr/local/LuaJIT

45eed02d99b3d9c26b3627519540d945.png

3. /etc/profile 文件中加入环境变量
        #vi /etc/profile 在最后面加入下面两行配置

export LUAJIT_LIB=/usr/local/LuaJIT/lib
export LUAJIT_INC=/usr/local/LuaJIT

#保存执行命令

source /etc/profile

#路径是上面luajit实际安装路径,路径错误安装nginx的lua模块时会报错找不到luajit库
# source /etc/profile 立刻生效,如果ngixn安装的时候不生效需要重启服务

1bfa8c67607160069d9f777ebdfc74d9.png

4.下载ngx_devel_kit模块

wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
tar -zxvf v0.3.0.tar.gz

#NDK(nginx development kit)模块是一个拓展nginx服务器核心功能的模块,第三方模块开发
#可以基于它来快速实现。 NDK提供函数和宏处理一些基本任务,减轻第三方模块开发的代码
#量。

54af5c623cc0a365c1923a96c81b88d9.png

5.下载lua-nginx-module模块

wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz
tar -zxvf v0.10.9rc7.tar.gz

#lua-nginx-module 模块使nginx中能直接运行lua

4c14b46c775a0ea67b825f93739e4327.png

6.再次编译nginx
 #增加这两个模块

--add-module=/usr/local/LuaJIT-2.0.5/lua-nginx-module-0.10.9rc7
--add-module=/usr/local/LuaJIT-2.0.5/ngx_devel_kit-0.3.0

通过nginx -V查看之前安装的信息

b5ea16f0ab539855ddcba9d406b924c7.png

切换到nginx安装目录下执行编译添加需要安装的模块

./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --add-module=/usr/local/LuaJIT-2.0.5/lua-nginx-module-0.10.9rc7 --add-module=/usr/local/LuaJIT-2.0.5/ngx_devel_kit-0.3.0 --with-stream

6658237e32a5a26d7551ead0c9daf73c.png

如果执行出现以下错误

b93e82827275c64fe3973a66852a259a.png

解决办法:

yum install lua-devel

32befe5d7c6112fffa13ce7e07a2d8ad.png

执行make && make install安装

make && make install

86dfa2c1f4f6cc7db7f78e2fe0472abf.png

7.安装完成后再次执行查看是否安装成功

nginx -V

如果出现以下错误:

4cc8b87ad88b78d329617fb6ccd2c735.png

一般是由于编译时没有生成动态链接库,只能手动链接
#查找安装的libluajit-5.1.so.2 

find / -name  libluajit-5.1.so.2

6a7b142ec0e30bdebd9afe47bca29110.png

cat /etc/ld.so.conf
#""里面的路径即时上图动态链接库的路径
echo "/usr/local/LuaJIT/lib" >> /etc/ld.so.conf
ldconfig

8e0903dca58997b0ce36bc74ee98bac3.png

如果没有出错,则如下

9fa8ff5325f1cfc65cd6765f65599e06.png

8. nginx配置文件进行lua的实际使用配置

在对应拦截请求处,新增验证

access_by_lua_block {
        local argToken = ngx.var.arg_token;
      local headerToken = ngx.var.http_token;
      --先验证请求参数中是否含有token
      if argToken ~= nil then
        if argToken ~= "eyJ0eXAiOicYMJFOlA3qpn0vXjXJD0XWDQ" then
           ngx.status = ngx.HTTP_FORBIDDEN
           ngx.say("Token失效")
           ngx.exit(ngx.HTTP_FORBIDDEN)
        end
      --如果参数中没有,验证请求头里面是否含有
      elseif headerToken ~= nil then
        if headerToken ~= "eyJ0eXAiOicYMJFOlA3qpn0vXjXJD0XWDQ" then
          ngx.status = ngx.HTTP_FORBIDDEN 
          ngx.say("Token失效")
          ngx.exit(ngx.HTTP_FORBIDDEN)
        end
      else
        print("都没有");
        ngx.status = ngx.HTTP_FORBIDDEN
        ngx.say("Token不能为空")
        ngx.exit(ngx.HTTP_FORBIDDEN)


      end
    }

3f83789c19547f07542326a8e0c81dfe.png


重启nginx使得配置文件生效,再去访问页面

84fe920b53e97b0ed0f7ff3f58ff418e.png


就会发现如果不携带token访问页面是访问不了的
携带token才可访问

e02c6537a6b1412669608902d542a16f.png

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Nginx配置Lua模块,你需要遵循以下步骤: 1. 在安装Nginx之前,请确保你已经安装了LuaJIT或者Lua开发库。你可以通过在终端中运行以下命令来安装它们: 对于Ubuntu/Debian系统: ``` sudo apt-get install libluajit-5.1-dev ``` 对于CentOS/RHEL系统: ``` sudo yum install lua-devel ``` 2. 下载Nginx的源码包,并解压缩它。 3. 在解压缩后的目录中,运行以下命令来配置编译选项,其中`--prefix`是安装目录的路径: ``` ./configure --prefix=/path/to/install --add-module=/path/to/nginx-lua-module ``` 请将`/path/to/nginx-lua-module`替换为你实际安装Lua模块的路径。 4. 运行以下命令编译和安装Nginx: ``` make sudo make install ``` 5. 配置Nginx以使用Lua模块。在Nginx配置文件(通常是`nginx.conf`)中添加以下内容: ``` http { lua_package_path "/path/to/lua-scripts/?.lua;;"; lua_package_cpath "/path/to/lua-modules/?.so;;"; server { ... location / { ... content_by_lua_file /path/to/lua-script.lua; } } } ``` 请将`/path/to/lua-scripts`替换为你实际存放Lua脚本的路径,将`/path/to/lua-modules`替换为你实际存放Lua模块的路径,将`/path/to/lua-script.lua`替换为你实际的Lua脚本文件路径。 6. 保存并关闭配置文件后,重新启动Nginx服务。你现在应该可以在浏览器中访问配置Lua脚本了。 这些步骤涵盖了在Nginx配置Lua模块的基本过程。请根据你自己的需求进行相应的调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值