nginx添加lua模块

news2024/11/18 23:26:58

目录

  • 已安装了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”

五、至此,安装成功。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么理解 Redis 事务

背景 在面试中经常会被问到,redis支持事务吗?事务是怎么实现的?事务会回滚吗?又是一键三连,我下面分析下,看看能不能吊打面试官 什么是Redis事务 事务是一个单独的隔离操作:事务中的所有命令…

骨科器械行业分析:市场规模为360亿元

骨科器械一般指专门用于骨科手术用的专业医疗器械。按国家食品药品监督局的分类划分常分为:一类;二类和三类。按照使用用途和性能主要分为骨科用刀、骨科用剪、骨科用钳、骨科用钩、骨科用针、骨科用刮、骨科用锥、骨科用钻、骨科用锯、骨科用凿、骨科用锉/铲、骨科…

知名开发工具RubyMine全新发布v2023.3——支持AI Assistant

RubyMine 是一个为Ruby 和 Rails开发者准备的 IDE,其带有所有开发者必须的功能,并将之紧密集成于便捷的开发环境中。 RubyMine v2023.3正式版下载 新版本改进AI Assistant支持、Rails应用程序和引擎的自定义路径、对Rails 7.1严格locals的代码洞察、RB…

网课:[NOIP2017]奶酪——牛客(疑问)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪中间有许多半径相同的球形空洞。我们可以在这块奶酪中建立空间坐标系&a…

灰度发布浅见

在之前的稳定性生产文章中有一项对于研发人员比较重要的措施是变更管控,关于变更管控其实在实际生产活动中有很多措施,因为对于不太的行业,其行业特点和稳定性生产的要求也不一样,例如下图,我们可以看到信通院调研的不…

AJAX——AJAX入门

1 什么是AJAX? Ajax(Asynchronous JavaScript and XML)是一种用于在Web应用程序中实现异步通信的技术。 简单点说,就是使用XMLHttpRequest对象与服务器通信。它可以使用JSON、XML、HTML和test文本等格式发送和接收数据。 AJAX最吸…

vue3 之 商城项目—登陆

整体认识 登陆页面的主要功能就是表单校验和登陆登出业务 路由配置 模版 <script setup></script><template><div><header class"login-header"><div class"container m-top-20"><h1 class"logo"&g…

【开源】基于JAVA+Vue+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 反馈表3.2.5 社区新闻表 四、系统展…

电子电器架构 —— 区域控制器是未来架构的正解吗?

电子电器架构 —— 区域控制器是未来架构的正解吗? 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶…

每日五道java面试题之java基础篇(一)

第一题 什么是java? PS&#xff1a;碎怂 Java&#xff0c;有啥好介绍的。哦&#xff0c;⾯试啊。 Java 是⼀⻔⾯向对象的编程语⾔&#xff0c;不仅吸收了 C语⾔的各种优点&#xff0c;还摒弃了 C⾥难以理解的多继承、指针等概念&#xff0c;因此 Java 语⾔具有功能强⼤和简单易…

中联重科舞动央视春晚舞台,长沙制造迎来高光时刻

文 | 螳螂观察 作者 | 陈淼 “龙行龘龘&#xff0c;欣欣家国”。癸卯兔年的腊月三十晚八点&#xff0c;央视龙年春晚如约而至。 这一次&#xff0c;龙年春晚以北京为主会场&#xff0c;联动辽宁沈阳、湖南长沙、陕西西安、新疆喀什&#xff0c;在除夕为全球华人奉上了精彩演…

基于 multiprocessing.dummy 的多线程池与单线程访问多网页的比较示例

一、示例代码&#xff1a; from multiprocessing.dummy import Pool as ThreadPool import time import requestsurls [ # URL队列&#xff0c;通过多线程访问http://www.python.org,http://www.python.org/about/,http://www.…

三、搜索与图论

DFS 排列数字 #include<iostream> using namespace std; const int N 10; int a[N], b[N]; int n;void dfs(int u){if(u > n){for(int i 1; i < n; i)cout<<a[i]<<" ";cout<<endl;return;}for(int i 1; i < n; i){if(!b[i]){b[…

ubuntu篇---ubuntu安装python3.9

ubuntu篇—ubuntu安装python3.9 在ubuntu上安装Python有两种方法:在线安装和源码编译安装。 方法1&#xff1a;使用apt在线安装 1.更新软件包列表并安装必备组件&#xff1a; $ sudo apt update $ sudo apt install software-properties-common2.将Deadsnakes PPA添加到系统…

LLM之LangChain(七)| 使用LangChain,LangSmith实现Prompt工程ToT

如下图所示&#xff0c;LLM仍然是自治代理的backbone&#xff0c;可以通过给LLM增加以下模块来增强LLM功能: Prompter AgentChecker ModuleMemory moduleToT controller 当解决具体问题时&#xff0c;这些模块与LLM进行多轮对话。这是基于LLM的自治代理的典型情况&#xff0c;…

AutoSAR(基础入门篇)7.1-汽车电子开发软件DaVinci Developer界面简介

目录 一、Dev界面简介 二、Dev使用流程简介 一、Dev界面简介 经典的是更老的版本,博主这里用的是较新一点的版本,不过大家不必担心版本问题,因为操作几乎都一样。我们先简单浏览一遍这个界面,大致从 上往下看可以分为这么几部分: 1. 导航栏:File那一排 2. 工具栏&…

门诊单据打印用什么软件,线下处方单生成系统教程

门诊单据打印用什么软件&#xff0c;线下处方单生成系统教程 一、前言 以下软件教程以 佳易王诊所电子处方管理系统软件V17.3为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 如上图&#xff0c;电子处方或病历记录开单生成保存后&#xff0c;可…

每日五道java面试题之java基础篇(三)

第一题. switch 是否能作⽤在 byte/long/String 上&#xff1f; Java5 以前 switch(expr)中&#xff0c;expr 只能是 byte、short、char、int。从 Java 5 开始&#xff0c;Java 中引⼊了枚举类型&#xff0c; expr 也可以是 enum 类型。从 Java 7 开始&#xff0c;expr 还可以…

序列流和反序列流

先看看它们在io体系中的位置&#xff1a;--------------------------------------------------------------------------------- 序列化流&#xff1a; 可以将java中的对象写到本地文件中&#xff0c;如这样的数据写到文件后变成这样----->目的就是防止别人看得懂&#xff…

解决“使用Edge浏览器每次鼠标点击会出现一个黑色边框”的问题

目录 一 问题描述 二 解决方案 三 方案来源 四 参考资料 & AI工具 一 问题描述 为了方便进行收藏夹同步&#xff0c;开始从Chrome浏览器切换到Edge浏览器。在使用Edge浏览器过程中发现“每次鼠标点击会出现一个黑色边框”&#xff08;效果如下图所示&#xff09;&#…