nginx添加lua模块

目录

  • 已安装了nginx,后追加lua模块
    • nginx 重新编译知识参考:
  • 从零安装
    • 一、首先需要安装必要的库(pcre、zlib、openssl)
    • 二、安装LUA环境及相关库 (LuaJIT、ngx_devel_kit、lua-nginx-module)
        • 注意: ltkj nginx-v1.21 不能使用 lua-nginx-module-v0.10.8,
    • 三、安装Nginx
    • 四、测试验证

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”

五、至此,安装成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/381675.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

「云原生可观测团队」获选「InfoQ 年度技术内容贡献奖」

随着云原生、人工智能逐渐成为各行各业的创新生产力工具。可以预见,我们即将进入全新的智能化时代。随着数据成为新型生产要素,云和 AI 正走向深度融合。云原生通过提供大规模多元算力的高效供给,可观测成为业务创新的核心基础设施&#xff0…

Android---Jetpack Compose学习002

Compose 布局。Compose 布局的目标:1)实现高性能;2)让开发者能够轻松编写自定义布局;3)在 Compose 中,通过避免多次测量布局子级可实现高性能。如果需要进行多次测量,Compose 具有一…

数字孪生:构建未来智慧社区的关键技术

随着科技的快速发展,数字孪生技术作为构建未来智慧社区的关键技术,正逐渐受到广泛关注。数字孪生技术能够实现物理世界与数字世界的交互映射,为智慧社区的建设提供强有力的支持。本文将探讨数字孪生技术在构建未来智慧社区中的作用和意义&…

JavaIO读取C101.txt文件

一、split分割带空格的字符串(四种方法及其区别) 参考:https://blog.csdn.net/yezonghui/article/details/106455940 String str "a b c d";String[] arr1 str.split(" "); //仅分割一个空格 String[] arr2 str…

yo!这里是Linux线程保姆级入门介绍

目录 前言 Linux线程基础 线程概念 底层示意图 线程vs进程 Linux线程控制 创建线程 线程ID 线程终止 线程等待 线程分离 Linux线程互斥 背景概念 互斥量mutex 1.相关接口 2.实现原理 可重入vs线程安全 死锁 Linux线程同步 条件变量 生产者消费者模型 基于…

MySQL-索引(INDEX)

文章目录 1. 索引概述及优劣势2. 索引结构和不同引擎对索引的支持情况2.1 Btree2.2 Hash索引 3. 索引分类4. 索引语法5. 索引在什么情况下会失效?5.1 最左前缀法则5.2 范围查询5.3 索引列运算5.4 头部模糊查询5.5 OR连接条件5.6 字符串不加引号5.7 数据分布影响 6. …

【开源】SpringBoot框架开发考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

跳表详解和实现|深挖Redis底层数据结构

文章目录 跳表前言项目代码仓库认识跳表跳表的实现思路跳表性能分析对比平衡树(avl和红黑树)和哈希表使用手册成员变量成员函数构造析构迭代器sizeclearemptyoperatorfindinserterase 跳表细节实现节点定义跳表结构定义构造、析构、拷贝构造和赋值重载si…

hummingbird,一个便于将模型部署到边缘设备的Python库!

前言 随着人工智能和机器学习的快速发展,将训练好的模型部署到生产环境中成为了一个重要的任务。而边缘计算设备,如智能手机、嵌入式系统和物联网设备,也需要能够运行机器学习模型以进行实时推理。Python Hummingbird 是一个强大的工具&…

Linux Terminator工具: 保存窗口布局 执行默认启动指令

How do I get Terminator to start up with my custom layout? - Ask Ubuntu

新春快乐(烟花、春联)【附源码】

新春快乐 一&#xff1a; C语言 -- 烟花二&#xff1a;Python -- 春联三&#xff1a;Python -- 烟花四&#xff1a;HTML -- 烟花 一&#xff1a; C语言 – 烟花 运行效果&#xff1a; #include <graphics.h> #include <math.h> #include <time.h> #include…

JSP原理简述

JSP动态网页技术&#xff0c;可以定义html&#xff0c;css&#xff0c;js等静态内容&#xff0c;还可以定义java代码等动态内容。 注意导入坐标时&#xff0c;JSP的scope标签是provided&#xff0c;和servlet一样&#xff0c;否则会报错。 JSP本质上就是一个Servlet&#xff0c…

C++11:移动构造函数【写法+调用时机】【C++返回vector为什么不报错】

文章目录 what is 移动构造函数&#xff1f;移动构造函数的实现的例子when 移动构造函数&#xff1f;在C98之前&#xff0c;没有移动构造函数&#xff0c;是怎么做的呢&#xff1f;后记 what is 移动构造函数&#xff1f; 构造函数string(string&& str)类似于复制构造…

单片机项目调试中的技巧和常见问题解决

单片机是嵌入式系统中的重要组成部分&#xff0c;在各种电子设备中发挥着重要的作用。在单片机项目开发过程中&#xff0c;调试是至关重要的一环&#xff0c;同时也会遇到一些常见问题。本文将介绍一些单片机项目调试的技巧以及常见问题的解决方法&#xff0c;希望能够对单片机…

leetcode——滑动窗口题目汇总

本章总结一下滑动窗口的解题思路&#xff1a; 在字符串中使用双指针 left 和 right 围成的一个左闭右开的区域作为一个窗口。不断将 right 向右滑动&#xff0c;直到窗口中的字符串符合条件。此时将 left 向右滑动&#xff0c;直到窗口中的字符串不符合条件&#xff0c;期间需…

H12-821_73

73.某台路由器Router LSA如图所示&#xff0c;下列说法中错误的是&#xff1f; A.本路由器的Router ID为10.0.12.1 B.本路由器为DR C.本路由器已建立邻接关系 D.本路由器支持外部路由引入 答案&#xff1a;B 注释&#xff1a; LSA中的链路信息Link ID&#xff0c;Data&#xf…

MFC实现遍历系统进程

今天我们来枚举系统中的进程和结束系统中进程。 认识几个API 1&#xff09;CreateToolhelp32Snapshot 用于创建系统快照 HANDLE WINAPI CreateToolhelp32Snapshot( __in DWORD dwFlags, //指定快照中包含的系统内容__in DWORD th32P…

C++初阶:适合新手的手撕vector(模拟实现vector)

上次讲了常用的接口&#xff1a;C初阶&#xff1a;容器&#xff08;Containers&#xff09;vector常用接口详解 今天就来进行模拟实现啦 文章目录 1.基本结构与文件规划2.空参构造函数&#xff08;constructor)4.基本函数&#xff08;size(),capacity(),resize(),reserve())4.增…

基于JavaWeb的网上订餐项目

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88825723?spm1001.2014.3001.5503 Java项目-16 浏览商品&#xff0c;会员登录&#xff0c;添加购物车&#xff0c;进行配送等功能 文件代码功能介绍 1.Src下的java文件存放的我们后端的…

Python算法题集_两两交换链表中的节点

Python算法题集_两两交换链表中的节点 题24&#xff1a;两两交换链表中的节点1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【四节点法】2) 改进版一【列表操作】3) 改进版二【三指针法】4) 改进版三【递归大法】 4. 最优算法 本文为Python算法…