Redian新闻
>
NGINX 模块现在可以用 Rust 编写了

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

公众号新闻

作者 | Claudio Masolo
译者 | 王强
策划 | 丁晓昀

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/

声明:本文由 InfoQ 翻译,未经许可禁止转载。

点击底部阅读原文访问 InfoQ 官网,获取更多精彩内容!

今日好文推荐
仅凭 7 页 PPT 拿下 1 亿美元融资、半年后估值超 10 亿!“欧洲 OpenAI”杀疯了
易鲸捷否认贴牌 Oracle;鸿蒙进教材:“纯血”版不再兼容安卓应用;大叔们遭AI女友“断崖式分手” | Q 资讯
向量数据库失宠了?OpenAI 力捧检索增强生成(RAG)技术,对行业来说意味着什么?
被时代选中的智谱 AI:成为 OpenAI,超越 OpenAI

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
Preparing for the 2023 Tax Year: Ensuring a Strong Tax Saving?【租房】Brighton两室公寓出租,现在可以入住,出门即是地铁,近BC|无忧精选公寓楼vivo自研系统正式发布 Rust语言编写,vivo X100官宣交了R1,有哪些经验教训可以用到R2 | 周六Live PodcastHengChang ShaoFang · Hurun China Rich List 2023Linus Torvalds:Linux 内核中的 Rust、AI 和疲劳的维护者 | Linux 中国FastDFS+Nginx - 本地搭建文件服务器同时实现在外远程访问「端口映射」BC省房东现在可以涨房租了!具体涨幅这样算!千万别大意!悬赏十几万元以用Rust重写Prettier荷兰政府部分撤销了此前颁发的NXT:2050i和NXT:2100i两个型号光刻机的出口许可证卡航 Avios 里程现在可以网上兑换 JetBlue 航班了!【悲伤,昨天没来得及发就贬值了……】弃 C/C++,微软官宣:请用 Rust 编写 Windows 驱动900亿美元估值,OpenAI的员工现在可以套现了如果你还记得年初流感的痛,有个疫苗现在可以打一打了!我是销售冠军(4)《爸》&合唱《还想听你的故事》JetBrains发布独立Rust IDE:RustRover英特尔演示酷睿 Ultra 1 代笔记本:关闭 CPU / GPU 模块,使用 SoC 模块播放 1080p 视频好消息!PRESTO可以用Google钱包支付车费了,更轻松更便捷!领钱!加拿大丰田、本田、宝马等车主现在可以获取赔偿了!车主注意!如果你买了这些品牌的汽车,现在可申领赔偿!新加坡华侨银行客户现在可以在美国、日本、韩国等地使用Alipay+ 了(附使用方法)钢琴考级到十级有什么用?FastDFS+Nginx本地搭建文件服务器同时实现在外远程访问「端口映射」Node.js 21发布,升级V8引擎,带来稳定的WebSteams模块和Test RunnerSoftBank’s struggles point to a tech investing hangover注意!领钱!丰田、本田、宝马等车主现在可以获取赔偿款了!现在可免费获得新冠检测试剂盒大模型RAG问答技术架构及核心模块回顾:从Embedding、prompt-embedding到RerankerFastDFS+Nginx,轻轻松松搭建一个本地文件服务器硬核观察 #1211 Linus Torvalds 谈 Rust 和 AI 编程DNA无处不在。现在可以轻松采集了 | 新知夏婳:两情难相知(二)Jetbrains发布全新 Rust IDE 命名RustRover,Linux 等可免费下载咀外文嚼汉字(284)“盗人猛猛”
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。