NGINX Unit 是一個輕量級、多功能的開源伺服器,具有兩個主要功能:
提供靜態媒體資產,
以八種語言運行應用程式程式碼。
Unit 將現代應用程式堆疊的多個層壓縮為一個有效、一致的解決方案,重點關注效能、低延遲和可擴展性。它旨在作為任何 Web 架構的通用構建塊,無論其複雜性如何,從企業規模部署到寵物主頁。
其原生 RESTful JSON API 支援零中斷和靈活配置的動態更新,同時其開箱即用的生產力可靠地擴展到生產級工作負載。我們透過包含多個進程的複雜、非同步、多執行緒架構來實現這一目標,以確保安全性和穩健性,同時充分利用當今的運算平台。
執行以下指令安裝unitd
(Unit守護程式)和unitctl
(控制工具)。
$brew安裝nginx/單元/單元
有關詳細資訊和可用的語言包,請參閱文件。
$ docker pull unit:$ mkdir /tmp/unit-control # 依需求自訂。 --mount type=bind,src=.,dst=/www --網路主機單位
有關圖像標籤的說明,請參閱文件。
警告:最新的圖像標籤可能不提供對特定語言模組的支持,請在拉取圖像之前從上面的連結檢查可用的圖像標籤。
您目前的工作目錄現在將安裝到位於/www
單元映像中。假設沒有進行進一步的自定義,您可以透過/tmp/unit-control/control.unit.sock
存取其套接字。
此幫助程式腳本為系統配置正確的套件儲存庫。
$ wget https://raw.githubusercontent.com/nginx/unit/master/tools/setup-unit && chmod +x setup-unit# ./setup-unit repo-config
Debian 衍生性商品:
# apt安裝單元
Fedora 衍生性商品:
# yum 安裝單元
有關詳細資訊和可用的語言包,請參閱文件。
unitctl
unitctl
透過易於使用的命令列介面簡化了 NGINX Unit 進程的管理。要開始使用unitctl
,請從官方 GitHub 版本或 Homebrew 下載它。
筆記
如果您使用 Homebrew 安裝了 Unit,則可以跳過此步驟,因為預設包含了unitctl
。
從 NGINX Unit 版本下載適合您系統的unitctl
位。
$ tar xzvf unitctl-master-x86_64-unknown-linux-gnu.tar.gz# mv unitctl /usr/local/bin/
如果您的電腦上安裝了 Docker,那麼您可以輕鬆地在您的應用程式旁邊啟動 Unit 的官方 Docker 映像之一。
提示
unit.nginx.org 上提供了使用 Python、PHP、WebAssembly、Node.js、Ruby 等建構的 Web 應用程式框架的操作方法和設定指南。
以下是使用unit:python
Docker 映像的範例:
$ unitctl 實例新 127.0.0.1:8001 /path/to/app 'unit:python'
/path/to/app
將掛載到 Docker 檔案系統中的/www
。
將其儲存到/path/to/app/wsgi.py
:
def application(environ, start_response): start_response("200 OK", [("Content-Type", "text/plain")]) return (b"Hello, Python on Unit!")
然後,您可以互動地編輯目前活動的配置:
$unitctl 編輯
{ "listeners": { "*:8000": { // 將偵聽器指向新應用程式"pass": "applications/python" } }, // 新增應用程式定義"applications": { "python": { "type ": "python", "路徑": "/www/", "模組": "wsgi" } }}
儲存並關閉時將套用有效配置。
$curl localhost:8000你好,Python on Unit!
更多 Python 配置範例可以在 Unit 文件中找到。
Unit 運行多種語言的應用程式。讓我們來探索如何使用curl
在Unit 上設定簡單的PHP 應用程式。
假設您將 PHP 腳本儲存為/www/helloworld/index.php
:
要在安裝了unit-php
模組的Unit上運行它,請先設定一個應用程式物件。讓我們將第一個設定片段儲存在名為config.json
的檔案中:
{ “helloworld”:{ “類型”:“php”, “root”:“/www/helloworld/” } }
沒有必要將其儲存為文件,但對於較大的物件可以派上用場。
現在, PUT
其放入 Unit 控制 API 的/config/applications
部分,通常預設可透過 Unix 網域套接字使用:
#curl -X PUT --data-binary @config.json --unix-socket /path/to/control.unit.sock http://localhost/config/applications
{“成功”:“重新配置完成。”}
接下來,從 API 的/config/listeners
部分中的偵聽器物件引用該應用程式。 這次,我們直接從命令列傳遞設定片段:
#curl -X PUT -d '{"127.0.0.1:8080": {"pass": "applications/helloworld"}}' --unix-socket /path/to/control.unit.sock http://本機/設定/監聽器
{ "success": "重新配置完成。"}
現在Unit接受指定IP和連接埠的請求,並將它們傳遞給應用程式進程。你的應用程式可以運行了!
$curl 127.0.0.1:8080 你好,PHP on Unit!
最後,查詢控制 API 的整個/config
部分:
#curl --unix-socket /path/to/control.unit.sock http://localhost/config/
單元的輸出應包含組織整齊的兩個片段:
{ “聽眾”:{ “127.0.0.1:8080”:{ “通過”:“應用程式/helloworld” } }, "applications": { "helloworld": { "type": "php", "root": "/www/helloworld/" } } }
單元支援運行 WebAssembly 元件 (WASI 0.2)。有關更多信息,請參閱單元配置文件。
我們的 OpenAPI 規範旨在簡化 NGINX Unit 部署的配置和集成,並提供有關控制 API 的權威知識來源。
開始提問和分享想法的首選地點是 GitHub 討論區。
我們的 GitHub 問題頁面提供了按照您自己的步調進行更多技術討論的空間。
GitHub 上的專案地圖揭示了我們目前的工作和未來的計劃。
我們的官方網站可能會提供不容易找到的答案。
透過貢獻參與專案!有關詳細信息,請參閱貢獻指南。
若要直接聯絡團隊,請訂閱郵件清單。
對於安全性問題,請給我們發送電子郵件,在主題中提及 NGINX Unit 並遵循 CVSS v3.1 規範。