NGINX 模塊現在可以用 Rust 編寫了

2023-11-13     InfoQ

原標題: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 文件、圖像和 Java,因而成為託管網站和 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 項目和設置依賴項:

創建 Rust 模塊時,需要實現 HTTPModule 特徵(trait),該特徵定義了 NGINX 入口點,包括後配置、預配置、create_main_conf 等。新模塊只需要實現針對其特定任務所需的函數。以下代碼是 postconfiguration 方法實現的示例:

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

文章來源: https://twgreatdaily.com/zh-mo/f3a1c6384300591d98a654e2053983f0.html