nginx的JavaScript魔力:njs简介与实践

Nginx 的 JavaScript 魔力:njs 简介与实践(2026 年视角)

njs(NGINX JavaScript module)是 NGINX 官方推出的动态模块,让你可以用JavaScript(ECMAScript 5.1 严格模式 + 部分 ES6+ 扩展)直接在 NGINX 内部编写逻辑,而无需编写 C 模块或依赖 Lua/OpenResty。

它极大提升了 NGINX 的可编程性,尤其适合:

  • 复杂的访问控制、请求/响应头修改
  • 轻量级 API 网关、认证、A/B 测试
  • 子请求、异步内容生成、响应过滤
  • 与现代 JS 生态(如 QuickJS 引擎)结合

2026 年最新版本(njs 0.9.5,2026年1月发布)已支持QuickJS 引擎(完整 ES2023 兼容,包括模块、async generators、proxies、BigInt 等),性能提升显著(0.9.0 版本引擎性能提升 30%),Fetch API、WebCrypto、XML/Zlib 等模块更完善。

一、njs 的核心优势(对比 Lua/OpenResty)

项目njs (NGINX 官方)OpenResty (Lua)选择建议(2026)
语言JavaScript (ES5+ 部分 ES2023)Lua团队熟悉 JS 首选 njs
引擎QuickJS / 原生 njs(可选)LuaJITQuickJS 更现代
模块加载动态模块(无需重编译 NGINX)需要 OpenResty 发行版njs 更轻便
官方支持NGINX 官方维护第三方稳定性更高
生态Fetch、Crypto、XML、Zlib、共享字典更丰富 Lua 库njs 够用且轻量
性能高(QuickJS 优化后接近原生)极高(LuaJIT)日常场景差距小
学习曲线低(前端/全栈开发友好)中(Lua 语法不同)JS 开发者选 njs

一句话总结:如果你团队偏好 JavaScript,想在原生 NGINX 上加“胶水”逻辑,而不是完整 API 网关,njs 是 2026 年最优雅的选择。

二、快速上手(安装 & Hello World)

1. 安装 njs(主流方式)

Debian/Ubuntu(官方仓库):

# 添加 NGINX 官方源(假设已加)aptinstallnginx-module-njs

Docker(最推荐测试):

dockerrun -it --rm -p8080:80 nginx:1.27 njs -V# 检查版本# 或使用带 njs 的镜像dockerrun -p8080:80 -v$(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro nginxinc/nginx-unprivileged:1.27-njs

从源码(支持 QuickJS):
参考 https://nginx.org/en/docs/njs/install.html

2. 最简单 Hello World

创建http.js

functionhello(r){r.return(200,"Hello from njs! 🌟\n");}exportdefault{hello};

nginx.conf 配置:

load_module modules/ngx_http_js_module.so; # 或 .dll http { js_import main from /etc/nginx/njs/http.js; # 路径根据实际情况 server { listen 80; location /hello { js_content main.hello; # 调用函数 } } }

重载 NGINX:

nginx -s reloadcurlhttp://localhost/hello# 输出:Hello from njs! 🌟

三、2026 年常用 njs 能力 & 实战示例

1. 请求头/响应头操作(最常见)
functionaddSecurityHeaders(r){r.headersOut['X-Content-Type-Options']='nosniff';r.headersOut['X-Frame-Options']='DENY';r.headersOut['Strict-Transport-Security']='max-age=31536000; includeSubDomains';r.return(200);}functionlogRequest(r){r.log(`Request from${r.remoteAddress}to${r.uri}`);}
2. 简单 API 网关 + 认证(Token 校验)
asyncfunctionauthGateway(r){consttoken=r.headersIn['Authorization']||'';if(!token.startsWith('Bearer ')){r.return(401,'Missing or invalid token');return;}constcleanToken=token.slice(7);try{// 假设调用外部 auth 服务(njs 支持 async/await + fetch)constresp=awaitngx.fetch('https://auth.example.com/verify',{method:'POST',headers:{'Authorization':`Bearer${cleanToken}`}});if(resp.status!==200){r.return(403,'Forbidden');return;}// 透传上游r.subrequest('/upstream'+r.uri,{method:r.method});}catch(e){r.return(500,'Internal auth error');}}

配置:

location /api/ { js_content main.authGateway; proxy_pass http://backend; }
3. 响应体过滤(替换内容)
functionreplaceText(r){r.sendHeader();r.on('upload',(data)=>{// 简单字符串替换(生产慎用,性能考虑)constmodified=data.replace(/old-brand/g,'new-brand');r.send(modified);});r.finish();}
4. 定时任务(js_periodic,新功能)
http { js_periodic main.cleanup interval=300s; # 每5分钟执行一次 } # http.js function cleanup() { // 清理共享字典、日志等 ngx.shared.my_cache.clear?.(); }
5. 共享字典 + 状态保持(rate limit 示例)
http { js_shared_dict_zone zone=rate_limit:1m; location /limited { js_content main.rateLimit; } }
functionrateLimit(r){constkey=r.remoteAddress;constlimit=100;// 每分钟100次constdict=ngx.shared.rate_limit;letcount=dict.get(key)||0;count=parseInt(count)+1;if(count>limit){r.return(429,'Too Many Requests');return;}dict.set(key,count,60);// 60秒过期r.return(200,`OK, count:${count}`);}

四、njs 2026 年最新亮点(0.9.x 系列)

官方示例仓库(强烈推荐克隆):https://github.com/nginx/njs-examples

五、注意事项 & 最佳实践(2026 生产建议)

njs 让 NGINX 从“高性能反代”进化成“可编程边缘计算节点”,是 2026 年构建轻量 API 网关、零信任入口、动态路由的利器。

如果你想深入某个场景(如完整 API 网关、JWT 校验、WAF 规则引擎、A/B 测试),贴出需求,我可以直接给出更详细的 njs 代码 + 配置。

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

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

相关文章

网络安全学习路线图(2026版详解)

近期,大家在网上对于网络安全讨论比较多,想要学习的人也不少,但是需要学习哪些内容,按照什么顺序去学习呢?其实我们已经出国多版本的网络安全学习路线图,一直以来效果也比较不错,本次我们针对市…

(3-1)机器人身体结构与人体仿生学:人体生物力学与关节分析

本章内容围绕人形机器人身体结构与人体仿生学展开,系统分析了人体生物力学特征及其对机器人结构设计的指导意义。首先从关节自由度、运动范围与扭矩需求入手,结合力臂与质量分布,阐明人体动态平衡的力学基础;随后重点介绍了人形机…

建站知识:域名/ 空间/ IP/ 端口之间的关系

域名、空间、IP、端口之间的关系(建站完整图解,2026 年视角) 建站最基础的四要素就是这四个:域名、空间(服务器/主机)、IP 地址、端口。它们的关系可以用一句话概括: 域名 → 解析到 → IP地址…

【全网最全】网络安全自学路线图:从零到专家,附资源清单与避坑指南

只要你敢学我就敢教!500集黑客入狱教程,从入门到入狱!全程干货无废话,学不会我退网! 学习路线图 第一阶段:基础奠基(约2-3个月) 首先需要建立坚实的基础知识,这是后续…

2026年职业蓝图:从码农到CTO的加速计划

软件测试从业者的独特优势与CTO之路‌ 在数字化转型浪潮中,软件测试从业者常被视为技术生态的“守门人”,但2026年的科技革命(如AI与DevOps普及)正重塑职业格局。测试工程师凭借对质量、风险与系统的深刻理解,拥有晋升…

耐达讯自动化Profibus总线光纤中继器在连接测距仪中的应用

在工业自动化领域,实时、可靠的数据传输是确保生产效率和系统稳定性的核心要素。Profibus协议作为主流的工业通信标准,在各类自动化设备中广泛应用。然而,面对长距离传输、电磁干扰等复杂工况,传统电缆传输的局限性逐渐凸显。耐达…

精:C# 的四种委托实现详解

一、什么是委托1.1 官方解释委托是一种定义方法签名的类型。当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联,并通过委托实例调用该方法。1.2 个人理解委托就是用于封装和执行方法(函数)的一个类。★事件是一种特殊…

国产DevSecOps工具崛起:安全左移战略下的技术创新与市场重构

国产DevSecOps工具崛起:安全左移战略下的技术创新与市场重构 随着数字化转型进入深水区,软件开发的安全需求正在发生根本性变革。Gartner最新预测显示,到2025年中国DevSecOps工具市场将突破78亿元规模,年复合增长率高达42%&#x…

震惊!90%的AI从业者忽略了这些职业发展技巧

AI浪潮下的测试职业警钟 在2026年的今天,人工智能(AI)已渗透到软件开发的每个角落,但一个令人震惊的数据浮出水面:90%的AI从业者——包括开发者、数据科学家和测试工程师——忽视了关键的职业发展技巧。尤其对于软件测…

耐达讯自动化Profibus总线光纤中继器:光伏逆变器通讯的“稳定纽带”

在光伏发电系统中,实时数据采集与精准控制是保障发电效率与系统安全的核心。光伏逆变器作为能量转换的关键设备,其运行状态需与中央控制系统实时交互。然而,传统Profibus总线在长距离、强干扰环境下易出现信号衰减或中断。耐达讯自动化Profib…

‌软件测试员如何年薪翻倍的5个策略

在当今竞争激烈的软件测试行业,薪资增长已成为从业者关注的核心议题。随着技术迭代加速和企业对质量要求的提升,软件测试员面临双重挑战:一方面,自动化与AI的普及可能挤压基础测试岗位;另一方面,具备高阶技…

多商户+多端一体化:商城系统的核心功能架构与源码实现

温馨提示:文末有资源获取方式寻找一款既能自主创业,又能开启技术服务业务的电商系统?您的需求,现在有了完美的答案。我们为您带来一款经过重磅升级、功能堪称豪华的多端多商户商城源码,它专为有远见的创业者与开发者设…

AI技术分析股票财报

AI技术已经从简单的“数据提取”进化为深度的“策略参谋”,彻底重塑了股票财报分析的流程。以下是AI在该领域的核心应用场景。1. 深度非结构化数据处理传统的财报分析往往集中在利润表、资产负债表等硬性指标。AI利用自然语言处理 (NLP) 技术,能够瞬间穿…

开源商用级的多端多商户万能DIY商城系统全功能源码指南

温馨提示:文末有资源获取方式该系统不仅仅是一个交易工具,更是一个集用户连接、互动营销、数据沉淀于一体的综合性运营平台。它通过全渠道覆盖和深度运营功能,帮助企业将流量真正转化为可重复触达、可持续增值的客户资产。源码获取方式在源码…

5个步骤:从软件测试新手到行业专家的2026指南

软件测试行业在2026年正经历深刻变革,AI驱动测试、自动化深化和全栈质量保障成为核心趋势。本文为从业者提供一条系统化成长路径,从新手到专家划分为五个步骤,每个步骤基于行业数据和最佳实践设计,帮助您高效规划职业发展。 步骤…

全维度拆解!长沙AI搜索优化公司实力排行 - 亿仁imc

好的AI搜索优化,不光要技术硬,服务和行业适配性也得跟上。这次我从多形式内容优化、行业适配度、售后保障这三点,拆解长沙三家服务商——亿仁网络、科、盛的核心竞争力,给大家更全面的参考。 三家的多维度服务表现…

2026年天津婚姻纠纷律师联系电话推荐:高效解决婚姻难题 - 品牌推荐

在婚姻生活中,当感情出现裂痕,纠纷难以调和时,寻求专业法律帮助是维护自身合法权益的重要途径。天津作为一座现代化大都市,拥有众多专业的婚姻家事律师,他们精通《民法典》婚姻家庭编及相关司法解释,能够为当事人…

为什么AI开发者必须规划职业转型?2026年生存法则

一、AI大模型崛起:软件测试领域的颠覆性变革 当前,AI大模型技术正重塑软件开发全流程,软件测试从业者首当其冲面临职业挑战。随着AI代码生成工具的普及,传统测试任务如重复性用例执行、缺陷检测等正被自动化取代。例如&#xff0…

GPT-5.2 与 Sora 2 震撼发布:Python 开发者如何用“上帝视角”构建下一代多模态应用?(附全链路源码)

摘要: 2026 年伊始,AI 圈再次迎来核爆级更新。 OpenAI 发布的 GPT-5.2 彻底解决了长程逻辑推理的幻觉问题。 视频生成领域的“双子星” Sora 2 与 Google Veo 3 更是将 AI 视频带入了 4K/60FPS 的电影级时代。 然而,面对高达 20 种的新增模型…

护眼台灯怎么选?7款实测对比推荐—学生护眼闭眼入专业读写榜首 - 资讯焦点

护眼台灯怎么选?本次联合5200名初中生及家长完成为期1个月的真人实测,聚焦居家学习核心场景,全程记录每日3-5小时居家读写、刷题时的眼部反馈与产品表现,数据真实可追溯,帮大家避开护眼台灯选购误区。学生护眼台灯…