AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

NGINX 模块现在可以用 Rust 编写了

作者:Claudio Masolo

  • 2023-11-11
    北京
  • 本文字数:1870 字

    阅读完需:约 6 分钟

大小:743.70K时长:04:13
NGINX 模块现在可以用 Rust 编写了

NGINX 近日公布了 ngx-rust 项目,允许开发人员使用 Rust 编写 NGINX 模块。 Rust 编程语言因其稳定性、多种安全特性、丰富的生态系统和强大的社区支持而成为一种强大且流行的语言选项。

 

NGINX 是一款高性能、开源的 Web 服务器和反向代理服务器软件,大部分互联网网站都在使用它。 NGINX 最初由 Igor Sysoev 于 2002 年创建,此后一直在发展,并广泛流行于 Web 托管、内容交付和应用程序部署领域。它的性能、可扩展性和多功能优势闻名于世,也因此成为提供 Web 内容和有效管理互联网流量的网站关键组件。

 

NGINX 的三大功能分别是:

  • Web 服务器:NGINX 主要扮演 Web 服务器的角色,用于处理 HTTP 和 HTTPS 请求。它可以提供静态 Web 内容,例如 HTML 文件、图像和 JavaScript,因而成为托管网站和 Web 应用程序的重要组件。

  • 反向代理服务器:NGINX 可以作为反向代理服务器,充当客户端请求和后端服务器之间的中介。常见的部署方式是用它来跨多个后端服务器分发传入请求,确保负载平衡和容错性。这在高流量环境中特别有用。

  • 负载均衡器:NGINX 可以充当负载均衡器,在多个服务器之间分配传入的网络流量。这可确保各个服务器不会过载,优化资源的使用率并为用户提供无缝体验。

 

一开始,ngx-rust 是为了推动用户使用 NGINX 开发与 Istio 兼容的服务网格产品而诞生的。不过这个项目沉寂了一段时间,在此期间社区积极参与其中,分叉存储库并基于 ngx-rust 提供的 Rust 绑定示例来创建他们的项目。

 

最近,F5 的分布式云机器人防御团队需要将 NGINX 代理集成到他们的防护服务中,这需要开发一个新模块。与此同时,F5 希望可以扩展其 Rust 产品组合并改善开发体验,以满足不断变化的客户需求。通过内部创新赞助以及与 ngx-rust 原作者的合作,F5 重振了 ngx-rust 项目。他们发布了 ngx-rust crate,优化了文档,构建也变得更友好,更适合社区使用了。

 

NGINX 实现大多数功能的基本构建块是模块(Modules)。NGINX 用户还能自定义模块的功能来支持特定的用例。传统上,NGINX 只支持用 C 编写的模块,但计算机科学和编程语言理论的进步让 Rust 等语言也可以用于 NGINX 模块开发了。

 

想要使用 ngx-rust 的话,你可以选择在本地从源代码构建、为 ngx-rust 项目做出贡献,或者直接从 crates.io 获取 crate。 ngx-rust 自述文件提供了贡献指南和本地构建要求。虽然 ngx-rust 仍处于开发的早期阶段,但 F5 计划在社区支持下提升其质量,带来更多特性。

 

ngx-rust 项目包含两个关键的 crate:

  • nginx-sys:这个 crate 从 NGINX 源代码生成绑定,通过 bindgen 代码自动化来自动创建外部函数接口(FFI)绑定。

  • ngx:这个主 crate 负责实现 Rust 粘合代码、API,并重新导出 nginx-sys。模块编写者通过 ngx 符号与 NGINX 交互,并且有了 nginx-sys 的重新导出就不需要显式导入了。

 

初始化 ngx-rust 项目工作区时,需要创建一个工作目录、初始化 Rust 项目和设置依赖项:

cd $YOUR_DEV_FOLDERmkdir ngx-rust-howtocd ngx-rust-howtocargo init --lib
复制代码


创建 Rust 模块时,需要实现 HTTPModule 特征(trait),该特征定义了 NGINX 入口点,包括后配置、预配置、create_main_conf 等。新模块只需要实现针对其特定任务所需的函数。以下代码是 postconfiguration 方法实现的示例:


struct Module;struct Module; impl http::HTTPModule for Module {     type MainConf = ();     type SrvConf = ();     type LocConf = ModuleConfig;     unsafe extern "C" fn postconfiguration(cf: *mut ngx_conf_t) -> ngx_int_t {         let htcf = http::ngx_http_conf_get_module_main_conf(cf, &ngx_http_core_module);         let h = ngx_array_push(             &mut (*htcf).phases[ngx_http_phases_NGX_HTTP_ACCESS_PHASE as usize].handlers,         ) as *mut ngx_http_handler_pt;         if h.is_null() {             return core::Status::NGX_ERROR.into();         }         // set an Access phase handler         *h = Some(howto_access_handler);         core::Status::NGX_OK.into()     } }  
复制代码

ngx-rust-howto 存储库提供了更多示例代码和实现。

 

随着 ngx-rust 项目的推出,NGINX 正在拥抱 Rust 编程语言,为开发人员提供了一种编写 NGINX 模块的新方式。该举措旨在增强 NGINX 的能力,并为开发人员提供一种更安全、更符合习惯的方式来使用 Web 服务器。此外,Cloudflare 开始使用 Rust 来实现 NGINX 模块,这篇博客文章介绍了相关细节。

 

原文链接

https://www.infoq.com/news/2023/10/nginx-modules-rust/

2023-11-11 08:0011156

评论 1 条评论

发布
用户头像
这图是游戏Rust的。。。
2023-11-13 14:45 · 北京
回复
没有更多了
发现更多内容

一个cpp协程库的前世今生(二)协程切换的原理

SkyFire

c++ 协程 cocpp

Greenplum内核源码分析-分布式事务(二)

王凤刚(ginobiliwang)

源码分析 分布式事务 greenplum

Greenplum内核源码分析-分布式事务(三)

王凤刚(ginobiliwang)

源码分析 分布式事务 greenplum

HTTPDNS 快速入门

37手游iOS技术运营团队

DNS httpdns

盘点 2021|一个新的开始

IT蜗壳-Tango

28天写作 12月日更 盘点2021 盘点 2021

谁编写了区块链的规则?

CECBC

2022年购买服务器运维管理软件选择哪家好?

行云管家

IT运维 服务器运维

2021MongoDB技术实践与应用案例征集活动获奖通知

MongoDB中文社区

COSCL开源评选名单公布!OceanBase 社区版荣获2021优秀开源项目奖

OceanBase 数据库

OceanBase 开源 OceanBase 社区版

回顾2021,展望2022 | TDengine一年“成绩”汇总

TDengine

数据库 tdengine 2021年终总结

区块链赋能生猪养殖,让“猪”事有迹可循

CECBC

《国产分布式数据库选型及满意度调查报告》出炉,OceanBase获得双料第一

OceanBase 数据库

分布式数据库 OceanBase 开源 OceanBase 社区版

iOS 编译器__Attribute__的入门指南

37手游iOS技术运营团队

xcode LLVM Clang编译 Clang Attribute

SpringMVC框架基础知识(01)

海拥(haiyong.site)

28天写作 12月日更

重塑企业创新方式 Serverless让云“开箱即用”

WorkPlus

云堡垒机和普通堡垒机的三大区别分析-行云管家

行云管家

云计算 网络安全 数据安全 堡垒机 云堡垒机

Xcode 配置多套 App 图标的方法 --- AppStore 图标 A/B Test 实践

37手游iOS技术运营团队

ios xcode appstore 产品页优化 自定产品页

你设备中的木马藏在哪里?为什么查杀困难?

喀拉峻

黑客 网络安全 安全 信息安全 木马病毒

OceanBase 通过工信部电子标准院首批开源项目成熟度评估

OceanBase 数据库

数据库 工信部 OceanBase 开源

Veritas:2022年数据安全及合规领域行业预测

WorkPlus

2021年末总结

编号94530

工作 架构设计 心得 2021 项目经验

硬核化解ISV四大痛点,华为云智联生活行业加速器助力伙伴实现商业成功

华为云开发者联盟

华为云 HarmonyOS 智联生活 华为云IoTDA 云云协同

全国首个!OceanBase 助力江西省养老保险全国统筹信息系统上线

OceanBase 数据库

OceanBase 开源 OceanBase 社区版 核心系统

数字化转型失败,有哪些原因?

禅道项目管理

数字化转型

链计算、新基建:区块链助力数字经济新生态

CECBC

MongoDB基本介绍与安装(1)

Tom弹架构

Java mongodb

OpenMLDB 12月会议纪要

第四范式开发者社区

人工智能 机器学习 第四范式 OpenMLDB

探索SaaS产业发展新机遇|鲁班会贵安首秀圆满收官

华为云开发者联盟

SaaS 华为云 应用构建

DTC 2021 | 一体化架构的原生分布式数据库正在成为核心系统首选

OceanBase 数据库

数据库 OceanBase 开源 OceanBase 社区版

“千言”开源数据集项目全面升级:数据驱动AI技术进步

百度开发者中心

千言

CRM系统为什么被认为是企业的重要资产?

低代码小观

企业管理 资产管理 CRM 企业管理系统 CRM系统

NGINX 模块现在可以用 Rust 编写了_架构_InfoQ精选文章