發布 nginx 1.19.7、njs 0.5.1 和 NGINX Unit 1.22.0

nginx 1.19.7的主分支已經發布,新功能的開發仍在繼續(在並行支援的穩定分支1.18中,僅進行了與消除嚴重錯誤和漏洞相關的更改)。

主要變化:

  • 當工作進程耗盡可用連線時,nginx 現在不僅會關閉 keepalive 連接,還會關閉等待套接字關閉的連線(「延遲關閉」)。
  • HTTP/2 中的連線處理程式碼與 HTTP/1.x 實作接近。 單獨設定「http2_recv_timeout」、「http2_idle_timeout」和「http2_max_requests」的支援已停止,取而代之的是通用指令「keepalive_timeout」和「keepalive_requests」。
  • 設定「http2_max_field_size」和「http2_max_header_size」已刪除,應使用「large_client_header_buffers」取代。

同時,njs 0.5.1 發布,這是一個用於 nginx Web 伺服器的 JavaScript 解釋器。 njs 解譯器實作了 ECMAScript 標準,並讓您可以使用設定中的腳本擴充 nginx 處理請求的能力。 腳本可以在設定檔中使用來定義高級邏輯,用於處理請求、生成配置、動態生成回應、修改請求/回應或快速建立存根以解決 Web 應用程式中的問題。

新版本新增了「js_header_filter」指令,該指令允許您設定用於過濾和更改任意回應標頭的 JavaScript 函數: js_import foo.js; 位置 / { js_header_filter foo.filter; proxy_pass http://127.0.0.1:8081/; } foo.js: function filter(r) { var cookies = r.headersOut['Set-Cookie']; var len = r.args.len ? 數字(r.args.len):0; r.headersOut['Set-Cookie'] = cookies.filter(v=>v.length > len); } 導出預設{過濾器};

也新增了 ngx.fetch() 方法,它實作了 Fetch API,提供了 HTTP 用戶端功能。 此方法支援對 body、headers、buffer_size 和 max_response_body_size 選項的處理。 傳回的Response物件支援arrayBuffer()、bodyUsed、json()、headers、ok、redirect、status、statusText、text()、type和url方法,Header物件支援get()、getAll()和has()方法。 函數 fetch(r) { ngx.fetch('http://nginx.org/') .then(reply =>reply.text()) .then(body => r.return(200, body)) .catch (e => r.return(501, e.message)); }

您還可以注意到 NGINX Unit 1.22 應用程式伺服器的發布,它提供了以各種程式語言(Python、PHP、Perl、Ruby、Go、JavaScript/Node.js 和 Java)運行 Web 應用程式的解決方案。 NGINX Unit可以同時執行多個不同程式語言的應用程序,其啟動參數可以動態更改,無需編輯設定檔和重新啟動。 該程式碼是用 C 語言編寫的,並根據 Apache 2.0 許可證分發。

NGINX Unit的新版本專注於提高穩定性、擴展測試工具和修復錯誤。 在為 Linux 產生的套件中,NGINX Unit 運行的使用者和群組已更改。 現在,進程在群組單元中的單一使用者單元下運行,而不是「nobody:nobody」。 確保與 Node.js 模組中的 ServerRequest 和 ServerResponse 物件的 Stream API 相容。 Python 應用程式的「path」選項允許指定多個目錄。

來源: opennet.ru

添加評論