nginx添加lua模块

目录

nginx配置server以后,我们可以很方便的直接访问到文件服务器上的文件资源,但是某些情况下,文件资源可能是隐私图片,比如客户注册时上传的身份证照片等等,这时候我们需要对图片访问进行控制,必须登录后才能查看到这些隐私图片。

一般来说,我们都是通过后端controller对权限进行控制,但是nginx作为图片服务器的情况下,再专门为此写一个后端程序显然比较笨重。所以根据实际情况,我们采用openresty平台,用lua脚本+redis读取token的方式即可完成对图片访问服务器的权限控制。


下面将演示如何配置nginx 及lua

已安装了nginx,后追加lua模块

nginx 重新编译知识参考:

https://blog.csdn.net/nalanxiaoxiao2011/article/details/133753090

从零安装

一、首先需要安装必要的库(pcre、zlib、openssl)

1、安装gcc(可通过"gcc -v"查看是否已经安装)

GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言编译器,包括C、C++、Objective-C、Fortran、Java、Ada和Go语言前端,也包括这些语言的库(如libstdc++,libgcj等)。

复制代码
sudo yum -y install gcc

2、安装pcre

pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式。

复制代码
sudo yum install -y pcre pcre-devel

3、安装zlib

zlib库提供了很多种压缩和解压缩方式,nginx使用zlib对http包的内容进行gzip。

复制代码
sudo yum install -y zlib zlib-devel

4、安装openssl

openossl是一个开放源代码的软件库包,nginx使用该库以支持https协议。

复制代码
sudo yum install -y openssl openssl-devel

二、安装LUA环境及相关库 (LuaJIT、ngx_devel_kit、lua-nginx-module)

1、安装LuaJIT

LuaJIT是Lua的即时编译器,使用C语言编写,兼容标准Lua 5.1。LuaJIT的运行效率比标准的Lua高出数倍(因为JIT技术),完全媲美使用C/C++代码。

cd /usr/local/soft #(下载到/usr/local/soft目录中)

1-1 安装包安装

复制代码
sudo wget -c http://luajit.org/download/LuaJIT-2.0.4.tar.gz
sudo tar -xzvf LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
sudo make install PREFIX=/usr/local/luajit

1-2 源码安装 https://luajit.org/install.html

官方网站:https://github.com/openresty/lua-nginx-module

复制代码
1. yum install git
2. git clone https://luajit.org/git/luajit.git
3. make & make install   或者 make & make install PREFIX=/usr/local/luajit
4. whereis lua 

2、下载ngx_devel_kit

ngx_devel_kit:Nginx Devel Kit,简称NDK,是一种Nginx模块,旨在扩展Nginx webserver的核心功能,可以作为其它Nginx模块的基础。

复制代码
cd /usr/localsoft  #(下载到/usr/local目录中)

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

3、下载lua-nginx-module

lua-nginx-module也是一个Nginx模块,它将Lua的功能嵌入到Nginx HTTP Server中。同时,这个模块是OpenResty的核心组件(OpenResty是一个通过Lua扩展NGINX实现的可伸缩的Web平台)。

注意: ltkj nginx-v1.21 不能使用 lua-nginx-module-v0.10.8,

在编辑 nginx 阶段报错如下:

ginx 编译出错:ngx_chain_t'赋值给'struct ngx_buf_t *'时类型不兼容

复制代码
./lua-nginx-module/src/ngx_http_lua_headers.c: 在函数'ngx_http_lua_ngx_req_raw_header'中:
../lua-nginx-module/src/ngx_http_lua_headers.c:151:15: 错误:将'ngx_chain_t'赋值给'struct ngx_buf_t *'时类型不兼容
b = hc->busy[i];
^
../lua-nginx-module/src/ngx_http_lua_headers.c:227:15: 错误:将'ngx_chain_t'赋值给'struct ngx_buf_t *'时类型不兼容
b = hc->busy[i];
^
make[1]: *** [objs/addon/src/ngx_http_lua_headers.o] 错误 1
make: *** [build] 错误 2

cd /usr/local/soft  #(下载到/usr/local/soft目录中)

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

## 已过期
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.8.tar.gz
tar -xzvf v0.10.8.tar.gz

三、安装Nginx

1、配置LuaJIT环境变量

复制代码
su  #(切换到root用户)
(输入root用户Password)

export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0

2、下载nginx-xxx.tar.gz 并解压
参考https://blog.csdn.net/nalanxiaoxiao2011/article/details/131856112

3、编译、安装(root权限下)

参考同上。

四、测试验证

1、使用lua指令的方式。

在/usr/local/nginx/conf/nginx.conf中加入如下代码:

复制代码
#在server中添加一个location
location /hello_lua {
   default_type 'text/plain';
   content_by_lua 'ngx.say("hello, lua")';
}

2、或者使用lua文件的方式。

在/usr/local/nginx/conf/nginx.conf中加入如下代码:

复制代码
#在server中添加一个location
location /lua_file {
    default_type 'text/html';
    content_by_lua_file conf/lua/test.lua; #在nginx安装目录下开始
}

然后编辑test.lua文件

复制代码
ngx.say("hello, world, from lua conf/lua/test.lua file");

3、启动nginx(注意有没有报错)

复制代码
sudo ln -s /usr/local/nginx/sbin/nginx usr/sbin/nginx  #(先做一下软连接,以便后续可以方便地执行nginx相关命令)
sudo nginx

注:如果启动nginx报如下错误:

复制代码
nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

可通过以下方式解决,然后再启动nginx:

  • 方法一:

    复制代码
     sudo ln -s /usr/local/luajit/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
  • 方法二:

    复制代码
    sudo vi /etc/ld.so.conf.d/libc.conf
    #(在libc.conf中增加如下代码,然后保存退出)
    /usr/local/luajit/lib  #(这里对应自己安装的luajit目录)
    #(退出后执行如下命令)
    sudo ldconfig
    sudo ln -s /usr/local/luajit/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2

4、http测试

复制代码
    访问"http://127.0.0.1/hello_lua"  显示"hello, lua"
复制代码
   访问"http://127.0.0.1/lua_file"  
   显示"hello, world, from lua conf/lua/test.lua file"

五、至此,安装成功。

相关推荐
Harbor Lau14 分钟前
Linux常用中间件命令大全
linux·运维·中间件
漫谈网络32 分钟前
基于 Netmiko 的网络设备自动化操作
运维·自动化·netdevops·netmiko
꧁坚持很酷꧂1 小时前
Linux Ubuntu18.04下安装Qt Craeator 5.12.9(图文详解)
linux·运维·qt
小诸葛的博客2 小时前
详解Linux中的定时任务管理工具crond
linux·运维·chrome
一默19913 小时前
CentOS 7.9升级OpenSSH到9.9p2
linux·运维·centos
韩仔搭建3 小时前
美乐迪电玩大厅加载机制与 RoomList 配置结构分析
游戏·小程序·开源·lua
BranH3 小时前
Linux系统中命令设定临时IP
linux·运维·服务器
极小狐4 小时前
极狐GitLab 项目功能和权限解读
运维·git·安全·gitlab·极狐gitlab
宁酱醇4 小时前
GitLab_密钥生成(SSH-key)
运维·ssh·gitlab
秋风起,再归来~4 小时前
【Linux庖丁解牛】—进程优先级!
linux·运维·服务器