首页 > 系统相关 >Nginx加载Lua环境

Nginx加载Lua环境

时间:2024-08-26 21:51:08浏览次数:13  
标签:conf lua access Lua Nginx openresty backend ngx 加载

Nginx加载Lua环境

开源配置

也可以直接部署春哥的开源项⽬OpenResty : http://openresty.org/cn/

# 安装依赖包
[root@linuxprobe]# yum install -y readline-devel pcre-devel openssl-devel
[root@linuxprobe]# cd /soft/src

# 下载并编译安装openresty
[root@linuxprobe src]# wget https://openresty.org/download/ngx_openresty-1.9.3.2.tar.gz
[root@linuxprobe src]# tar zxf ngx_openresty-1.9.3.2.tar.gz
[root@linuxprobe src]# cd ngx_openresty-1.9.3.2
[root@linuxprobe ngx_openresty-1.9.3.2]# ./configure --prefix=/soft/openresty-1.9.3.2 \
--with-luajit --with-http_stub_status_module \
--with-pcre --with-pcre-jit
[root@linuxprobe ngx_openresty-1.9.3.2]# gmake && gmake install
[root@linuxprobe ngx_openresty-1.9.3.2]# ln -s /soft/openresty-1.9.3.2/ /soft/openresty

#配置
[root@180-143 conf]# cd /soft/openresty-1.9.3.2/nginx/conf
[root@180-143 conf]# cat nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;

include ./conf.d/*.conf ;
}
# 测试openresty安装
# vim /soft/openresty/nginx/conf/nginx.conf
server {
listen 80;
server_name www.yuansredevsecops.top;
    location /hello {
    	default_type text/html;     
        content_by_lua 'ngx.say("hello ,lua scripts")';
        }
	}

# 启动openresty
[root@nginx-php-k-1 conf.d]# /soft/openresty/nginx/sbin/nginx

image-20240826212934646

Nginx调⽤Lua指令

Nginx调⽤ Lua 模块指令,Nginx的可插拔模块加载执⾏

语法
set_by_lua set_by_lua_file 设置Nginx变量,可以实现负载的赋值逻辑
access_by_lua access_by_lua_file 请求访问阶段处理, ⽤于访问控制
content_by_lua content_by_lua_file 内容处理器, 接受请求处理并输出响应

Nginx 调⽤ Lua API

变量
ngx.var nginx变量
ngx.req.get_headers 获取请求头
ngx.req.get_uri_args 获取url请求参数
ngx.redirect 重定向
ngx.print 输出响应内容体
ngx.say 输出响应内容体,最后输出⼀个换⾏符
ngx.header 输出响应头

set_by_lua 和 set_by_lua_file

set_by_lua 和 set_by_lua_file :这两个模块都⽤于设置 Nginx 变量。 set_by_lua 通过 inline Lua 代码设置变量的值, set_by_lua_file 则可以通过引⼊ Lua 脚本⽂件来设置变量。这两个模块通常⽤于实现负载的赋值逻辑,如根据请求的 headers 头部信息等进⾏动态变量设置。

/soft/openresty-1.9.3.2/nginx/conf/conf.d/luasetbylua.conf

upstream backend {
server 192.168.1.152:8081 weight=1;
server 192.168.1.152:8082 weight=1;
}

server {
listen 80;
server_name luasetbylua.yuansredevsecops.top;
location /hello {
default_type text/html;
content_by_lua_block {
ngx.say("HelloWorld")
}
}

location / {
set $backend 'backend';
set_by_lua_file $backend_lua_file /soft/openresty-1.9.3.2/nginx/conf/lua/backend.lua;
proxy_pass http://$backend;
}
}

/soft/openresty-1.9.3.2/nginx/conf/lua/backend.lua

# cat /soft/openresty-1.9.3.2/nginx/conf/lua/backend.lua
-- backend.lua

if ngx.var.remote_addr == '127.0.0.1' then
-- Use 10.1.106.66:8081 for local requests
ngx.var.backend = '192.168.1.152:8081';
else
-- Use 10.1.106.66:8082 for remote requests
ngx.var.backend = '192.168.1.152:8082';
end

//上述脚本内容是判断ngx.var.remote_addr请求地址是否等于127.0.0.1,是则返回8081,否则返回8082
[root@nginx-php-k-1 conf.d]# cat /etc/hosts
127.0.0.1 luasetbylua.yuansredevsecops.top

access_by_lua 和 access_by_lua_file

access_by_lua 和 access_by_lua_file :这两个模块⽤于在 Nginx 处理请求的访问阶段(access phase)执⾏ Lua代码,⼀般⽤于请求的认证和访问控制。例如,可以使⽤ Lua 脚本从请求的 headers 中提取⽤户凭证,然后进⾏⽤户认证并判断权限,以决定是否允许请求继续执⾏。

假设我们有⼀个 API,需要进⾏鉴权,只有拥有正确的 token 的请求才能访问。

我们可以使⽤ access_by_lua 或 access_by_lua_file 在 Nginx 的 access 阶段进⾏鉴权逻辑的实现,例如:

192.168.1.170

[root@180-143 conf.d]# cat luaaccess.conf
upstream backend1 {
server 192.168.1.152:8081;
}

server {
listen 80;
server_name luaaccess.yuansredevsecops.top;

location /api {
# 鉴权
access_by_lua '
local token = ngx.var.http_authorization
if token ~= "SECRET-TOKEN" then
return ngx.exit(ngx.HTTP_UNAUTHORIZED)
end
';

# 路由到 backend1
set $backend "backend1";
proxy_pass http://$backend/;
}
}

在这个例⼦中,我们使⽤ access_by_lua 进⾏鉴权,如果请求头中的 Authorization 值不为 "SECRETTOKEN" ,我们返回 HTTP 401 错误,不继续处理请求。

如果鉴权通过,我们设置 $backend 变量的值为backend1,并将请求转发给http://backend1.example.com

这样,我们就可以使⽤ access_by_luaaccess_by_lua_file实现访问控制和 API 鉴权的逻辑。

image-20240826110403714

image-20240826130048983

image-20240826114551292

标签:conf,lua,access,Lua,Nginx,openresty,backend,ngx,加载
From: https://www.cnblogs.com/zgw03/p/18381628

相关文章

  • Nginx+Lua实现WAF应⽤防⽕墙
    Nginx+Lua实现WAF应⽤防⽕墙1.常⻅的恶意⾏为爬⾍⾏为和恶意抓取,资源盗取防护⼿段1.基础防盗链功能不让恶意⽤户能够轻易的爬取⽹站对外数据2.access_moudle->对后台,部分⽤户服务的数据提供IP防护解决⽅法192.168.1.170[[email protected]]#cat/soft/openre......
  • Nginx+Lua实现代码灰度发布
    Nginx+Lua实现代码灰度发布使⽤Nginx结合lua实现代码灰度发布灰度发布是⼀种将新版本的软件或功能逐步推⼴给⼀⼩部分⽤户,以进⾏测试和评估它们的反应的⽅法。实际上,它是⼀种渐进式的部署⽅法,可以逐步将新版本或功能逐步发布给不同的⽤户群体,直到所有⽤户都可以使⽤这个新......
  • 合宙LuatOS产品规格书——Air700EAQ
    LuatAir700EAQ是合宙的LTECat.1bis通信模块,采用移芯EC716E平台,支持LTE3GPPRel.13技术。该模块专为满足小型化、低成本需求而设计,具备超小封装和极致成本优势。Air700EAQ支持移动双模,内置丰富的网络协议,集成多个工业标准接口,支持USB2.0,以及远程OTA固件升级。主要特点包......
  • 如何彻底卸载nginx
    彻底卸载Nginx包括删除Nginx软件包及其相关配置文件和目录。以下是针对不同操作系统的彻底卸载步骤:###1.在Ubuntu/Debian系统上1.**停止Nginx服务**:   ```bash   sudosystemctlstopnginx   ```2.**卸载Nginx软件包**:   ```bash   sudoapt-g......
  • LogicBench: Towards Systematic Evaluation of Logical Reasoning Ability of Large
    本文是LLM系列文章,针对《LogicBench:TowardsSystematicEvaluationofLogicalReasoningAbilityofLargeLanguageModels》的翻译。LogicBench:大型语言模型逻辑推理能力的系统评价摘要1引言2相关工作3LogicBench4结果和分析5结论局限性摘要最近......
  • centos 配置nginx
    1.检查系统版本,安装nginxcat/etc/redhat-release,//这个命令会显示你的CentOS发行版名称以及大致的版本号rpm-qCentOS-release,//这将返回当前安装的CentOS版本的具体编号uname-r,//内核的完整版本字符串。2.安装nginxsudoyuminstallepel-release-y#如果还没有安......
  • ZBlog搭建的网站有的时候会提示【JavaScript加载失败】
    经常会有朋友反映,自己通过ZBlog搭建的网站偶尔会出现【JavaScript加载失败】这样的提示。那么,当遭遇此种状况时究竟应当如何应对呢?首先,您需要仔细检查自己所使用的浏览器版本是否太过陈旧(例如像IE6/7/8之类的旧版本),或者是否因为所使用的插件出现错误从而损坏了系统的JS文......
  • 科普文:软件架构Nginx系列之【万字详解Nginx功能模块功能、应用场景、实操配置】
    Nginx模块分类Nginx是高度模块化的,他的模块分为核心模块,标准模块,和第三方模块。如上图所示。其中标准模块又分为三类:HTTPmodule(web模块)StandardHTTPModule(标准模块)OptionalHTTPModule(可选模块)MailModule(邮箱模块)StreamModule(四层代理相关的模块)......
  • 科普文:软件架构Nginx系列之【万字详解Nginx防盗链】
    概叙盗链攻击是一种常见的网络安全威胁,不仅侵犯了内容创作者的版权,还可能会给原网站带来严重的损失。了解盗链攻击的原理和类型,采取有效的防范措施,是保护网站和服务的重要手段。通过技术和法律手段的结合,可以有效地防止和减轻盗链攻击的影响。随着技术的发展,防盗链的方法也......
  • 科普文:软件架构Nginx系列之【Nginx 核心架构设计和原理】
    概叙Nginx是什么Nginx(engineX)是一个开源的轻量级的HTTP服务器,能够提供高性能的HTTP和反向代理服务。与传统的Apache服务器相比,在性能上Nginx占用系统资源更小、支持高并发,访问效率更高;在功能上,Nginx不仅作为Web服务软件,还适用于反向代理、负载均衡等场景;在安装配置上,Nginx......