NGINX Unit 作為新一代動態應用伺服器,解決了現代應用開發中微服務架構和多語言環境帶來的挑戰。其核心特性在於支援多種程式語言、API 驅動的組態管理,以及動態組態調整而無需重啟服務。這些特性使得開發團隊能靈活選擇技術堆疊,並提升系統的維運效率。

在系統架構方面,NGINX Unit 採用控制程式、路由程式和應用程式的多層級設計,實作了應用隔離和高效的請求分發。控制程式透過 RESTful API 提供組態和管理功能,方便與 DevOps 工具鏈整合。此外,NGINX Unit 也提供多種安全特性,例如應用隔離、Unix 使用者許可權控制和 API 安全性,以應對微服務架構下的安全挑戰。

NGINX Unit 簡介與核心特性

NGINX Unit 是一款現代化的動態應用伺服器,能夠支援多種程式語言並提供API驅動的組態與管理功能。本章將深入探討NGINX Unit的設計理念、架構特點及其在現代應用架構中的角色。

應用環境變遷與 NGINX Unit 的誕生背景

現代網頁應用的開發模式已經與過去大不相同。過去的應用通常是從零開始構建,並針對特定需求進行開發,更新頻率相對較低。然而,當前的應用開發採用更為頻繁的迭代模式,微服務架構的採用使得應用程式的語言和程式碼基礎變得更加多樣化。

隨著網頁應用透過微服務、不同語言及其版本的多樣化發展,管理中介軟體(即接收請求並將其傳遞給應用程式碼的應用伺服器)的操作複雜度也隨之增加。NGINX Unit 的出現正是為瞭解決這一問題。

動態應用伺服器的特性

NGINX Unit 被設計為一個動態應用伺服器,主要具備以下核心特性:

多語言支援(Polyglotism)
NGINX Unit 能夠支援多種程式語言,包括但不限於 Python、PHP、Node.js、Ruby、Java 等。這種多語言支援能力使得開發團隊能夠根據具體需求選擇最合適的程式語言,而無需受限於特定的技術堆疊。

API 驅動的組態與伺服器管理
NGINX Unit 提供根據 RESTful API 的組態與管理介面,管理員可以透過 API 動態調整伺服器組態,無需重啟服務即可生效,大大提高了系統的靈活性和可維護性。

NGINX Unit 的安裝與組態

本章節將詳細介紹 NGINX Unit 在不同作業系統上的安裝流程,以及基本的組態方法。

在 Red Hat 相關系統上安裝 NGINX Unit

在根據 Red Hat 的系統(如 CentOS、RHEL)上,可以使用 yumdnf 包管理器進行安裝:

# 新增 NGINX Unit 的官方倉函式庫
sudo yum install -y https://unit.nginx.org/rhel/8/x86_64/unit-release-rhel-8-1.el8.ngx.noarch.rpm

# 安裝 NGINX Unit
sudo yum install -y unit

# 啟動 NGINX Unit 服務
sudo systemctl start unit

在 Debian 相關系統上安裝 NGINX Unit

在根據 Debian 的系統(如 Ubuntu)上,可以使用 apt 包管理器進行安裝:

# 新增 NGINX Unit 的官方倉函式庫
sudo apt install -y gnupg2 curl
curl -s https://unit.nginx.org/keys/unit-signing-key.gpg | sudo apt-key add -
echo "deb https://packages.nginx.org/unit/ubuntu/ $(lsb_release -cs) unit" | sudo tee /etc/apt/sources.list.d/unit.list

# 更新套件列表並安裝 NGINX Unit
sudo apt update
sudo apt install -y unit

# 啟動 NGINX Unit 服務
sudo systemctl start unit

內容解密:

此段落展示瞭如何在不同 Linux 發行版上安裝 NGINX Unit。首先,我們新增了官方的軟體倉函式庫以確保獲得最新的穩定版本。接著,使用相應的包管理器安裝 NGINX Unit。最後,啟動 NGINX Unit 服務以開始使用該應用伺服器。

NGINX Unit 的進階組態與應用整合

本章節將深入探討 NGINX Unit 的組態物件,包括應用物件(Application Object)、監聽物件(Listener Object)以及路由物件(Route Object)。同時,我們還將介紹如何將 NGINX Unit 與常見的網頁應用框架(如 WordPress、Django、Express)進行整合。

組態物件詳解

NGINX Unit 的組態主要涉及以下三個核心物件:

應用物件(Application Object)
定義瞭如何啟動和管理應用程式,包括指定執行程式語言、應用程式根目錄等。

```json
{
  "type": "python",
  "home": "/path/to/app/",
  "module": "wsgi"
}
```

監聽物件(Listener Object)
定義了 NGINX Unit 如何監聽特定的網路埠,並將請求轉發給對應的應用程式。

```json
{
  "listeners": {
    "*:8080": {
      "pass": "applications/myapp"
    }
  }
}
```

路由物件(Route Object)
用於定義請求路由規則,將特定的請求路徑對映到對應的應用程式或處理邏輯。

```json
{
  "routes": {
    "myapp": [
      {
        "action": {
          "pass": "applications/myapp"
        }
      }
    ]
  }
}
```

內容解密:

此段落詳細介紹了 NGINX Unit 的三個核心組態物件。應用物件負責定義應用程式的執行環境;監聽物件負責設定網路監聽並轉發請求;路由物件則用於定義請求的路由規則。這三者的協同工作使得 NGINX Unit 能夠靈活地管理和分發請求。

NGINX Unit 在微服務架構中的實踐與安全性考量

隨著微服務架構的普及,NGINX Unit 在其中的角色變得越來越重要。本章節將探討如何利用 NGINX Unit 提升微服務架構下的系統安全性,並介紹其在容器化環境中的佈署實踐。

微服務架構下的安全性挑戰

在微服務架構中,不同服務之間的互動變得更加頻繁,這也帶來了新的安全挑戰。NGINX Unit 提供了一系列安全特性來應對這些挑戰,包括:

應用隔離(Application Isolation)
NGINX Unit 能夠在不同的使用者許可權下執行應用程式,從而實作應用層級的隔離。

Unix 使用者許可權控制
可以為不同的應用程式組態不同的 Unix 使用者,以最小化許可權原則來降低安全風險。

透過加密實作 API 安全性
NGINX Unit 的控制 API 支援透過 SSL/TLS 加密進行保護,確保管理介面的安全性。

內容解密:

本段落強調了在微服務架構下,NGINX Unit 提供的安全特性對於保護系統免受潛在威脅的重要性。透過應用隔離、細粒度的許可權控制以及加密的 API 介面,NGINX Unit 能夠有效提升整體系統的安全性。

NGINX Unit:新一代動態應用伺服器

NGINX Unit 是一種動態應用伺服器,能夠在執行時動態重新組態而不會丟失請求。它的設計旨在簡化多語言、多版本應用程式的管理和佈署。

動態應用伺服器的架構

NGINX Unit 的架構分為多個層級,包括控制程式、路由程式和應用程式。每個應用程式由獨立的程式或程式集執行,路由程式負責接收連線請求並將其非同步佇列至目標應用程式。控制程式管理應用程式和路由程式的組態,管理員或自動化工具透過 API 與控制程式互動。

架構圖示

  graph LR
    A[控制程式] -->|管理組態| B[路由程式]
    B -->|接收請求| C[應用程式1]
    B -->|接收請求| D[應用程式2]
    A -->|管理| C
    A -->|管理| D

**圖表翻譯:**此圖示展示了 NGINX Unit 的基本架構,包括控制程式如何管理路由程式和應用程式,以及路由程式如何分配請求至不同的應用程式。

多語言支援(Polyglotism)

NGINX Unit 提供單一的中介軟體伺服器,能夠執行多種編譯和指令碼語言,包括 PHP、Python、Ruby、Node.js、Go 和 Java。這使得開發團隊能夠選擇最適合其服務的程式語言,從而提高開發效率和系統的靈活性。

API 驅動的組態與伺服器管理

NGINX Unit 的控制程式透過 RESTful API 提供組態和管理功能。該 API 可以透過 Unix 或 TCP socket 提供服務,使得組態可以被緊密控制,同時也支援遠端組態。這種設計使得 NGINX Unit 能夠與 DevOps 工具鏈原生整合。

API 組態範例

{
  "listeners": {
    "*:80": {
      "pass": "routes"
    }
  },
  "routes": [
    {
      "action": {
        "pass": "applications/myapp"
      }
    }
  ],
  "applications": {
    "myapp": {
      "type": "python",
      "path": "/path/to/myapp/",
      "module": "wsgi"
    }
  }
}

程式碼解密:

此 JSON 組態範例定義了一個 NGINX Unit 的基本組態:

listeners 部分定義了監聽的位址和埠,並將請求傳遞給 routesroutes 部分定義了路由規則,將請求傳遞給名為 myapp 的應用程式。 applications 部分定義了名為 myapp 的 Python 應用程式的詳細資訊,包括路徑和使用的模組。 這種組態方式使得管理員可以動態調整應用程式的路由和組態,而無需重啟伺服器。

安裝 NGINX Unit

NGINX Unit 可以安裝在多種 Linux 發行版上。本章節介紹如何在根據 Red Hat 和 Debian 的系統上安裝 NGINX Unit。

在 Red Hat–Based 系統上安裝

建立一個名為 /etc/yum.repos.d/unit.repo 的檔案,內容如下: ini [unit] name=unit repo baseurl=https://packages.nginx.org/unit/rhel/$releasever/$basearch/ gpgcheck=0 enabled=1 安裝 NGINX Unit 基礎套件: bash sudo yum install unit 安裝其他語言模組: bash sudo yum install unit-php unit-python unit-go unit-perl unit-jsc-common

安裝程式碼解密:

  • 首先,建立一個 YUM 倉函式庫檔案,指向 NGINX 官方的 Unit 套件倉函式庫。
  • 使用 yum install 命令安裝 NGINX Unit 基礎套件。
  • 安裝所需的語言模組,以便支援不同的應用程式語言。

在 Debian-Based 系統上安裝

確保 APT 系統能夠使用 HTTPS 倉函式庫: bash sudo apt-get install apt-transport-https 建立一個名為 /etc/apt/sources.list.d/unit.list 的檔案,內容如下: plaintext deb https://packages.nginx.org/unit/ubuntu/ CODENAME unit deb-src https://packages.nginx.org/unit/ubuntu/ CODENAME unit 下載並安裝 NGINX 簽名金鑰: bash wget http://nginx.org/keys/nginx_signing.key sudo apt-key add nginx_signing.key 更新套件列表並安裝 NGINX Unit: bash sudo apt-get update sudo apt-get install unit 5. 安裝其他語言模組: bash sudo apt-get install unit-php unit-python2.7 unit-perl unit-jsc-common

安裝程式碼解密:

  • 首先,確保 APT 系統能夠使用 HTTPS 來源。
  • 建立一個 APT 來源列表檔案,指向 NGINX 官方的 Unit 套件倉函式庫。
  • 下載並新增 NGINX 的 GPG 簽名金鑰,以驗證套件的真實性。
  • 更新套件列表後,使用 apt-get install 命令安裝 NGINX Unit 和所需的語言模組。

NGINX Unit 的安裝與設定

NGINX Unit 是一個多功能的應用伺服器,支援多種語言的應用程式佈署。在本章中,我們將介紹如何安裝 NGINX Unit 以及其基本設定。

從第三方儲存函式庫安裝

在某些系統上,NGINX Inc. 並未提供預建的套件,此時可以透過第三方儲存函式庫進行安裝。請注意,這些儲存函式庫由社群維護,NGINX Inc. 不對其內容負責。

Alpine Linux

sudo apk update
sudo apk upgrade
sudo apk add unit
sudo apk add unit-openrc unit-perl unit-php7 unit-python3 unit-ruby

Arch Linux

sudo pacman -S git
git clone https://aur.archlinux.org/nginx-unit.git
cd nginx-unit
makepkg -si

FreeBSD

sudo pkg install -y unit

Gentoo

sudo emerge --sync
sudo emerge www-servers/nginx-unit

RHEL、CentOS 和 Fedora

使用 Remi 的 RPM 儲存函式庫來安裝最新版本的 PHP:

sudo yum install --enablerepo=remi unit \
php54-unit-php php55-unit-php php56-unit-php \
php70-unit-php php71-unit-php php72-unit-php php73-unit-php

Node.js

Unit 的 Node.js 套件稱為 unit-http,它使用了 Unit 的 libunit 函式庫。您的 Node.js 應用程式需要此套件才能在 Unit 中執行:

sudo npm install -g --unsafe-perm unit-http

內容解密:

上述指令展示瞭如何在不同作業系統上從第三方儲存函式庫安裝 NGINX Unit。每個指令都針對特定的作業系統和套件管理系統進行了最佳化。透過這些步驟,您可以在 NGINX Inc. 未提供官方套件的系統上安裝 NGINX Unit。

從原始碼安裝

如果您需要從原始碼安裝 NGINX Unit,請按照以下步驟進行。

在 Debian 和 Ubuntu 上安裝必要的套件

sudo apt-get install build-essential
sudo apt-get install golang
sudo curl -sL https://deb.nodesource.com/setup_<Node.js version>.x | bash -
apt-get install nodejs
sudo apt-get install php-dev libphp-embed
sudo apt-get install libperl-dev
sudo apt-get install python-dev
sudo apt-get install ruby-dev
sudo apt-get install libssl-dev

在 Amazon Linux、CentOS、RHEL 和 Fedora 上安裝必要的套件

sudo yum install gcc make unzip
sudo yum install golang
sudo curl -sL https://rpm.nodesource.com/setup_<Node.js version>.x | bash -
yum install nodejs
sudo yum install php-devel php-embedded
sudo yum install perl-devel perl-libs
sudo yum install python-devel
sudo yum install ruby-devel
sudo yum install openssl-devel

下載並編譯原始碼

curl -O https://codeload.github.com/nginx/unit/zip/master
unzip master
cd unit-master/
./configure --prefix=/opt/unit/
./configure go
./configure perl
./configure php
./configure python
./configure ruby
make
make perl
make php
make python
make ruby
sudo make go-install
sudo make node-install
sudo make install

內容解密:

從原始碼安裝 NGINX Unit 需要先安裝編譯所需的套件,然後下載並編譯原始碼。上述步驟詳細介紹瞭如何在不同的 Linux 發行版上完成這些任務。透過 ./configure 指令,您可以指定安裝目錄和需要編譯的模組。最後,使用 make 指令進行編譯和安裝。

設定 NGINX Unit

NGINX Unit 使用 JSON 格式的設定檔,主要涉及三個設定物件:應用程式物件(Application Object)、監聽器物件(Listener Object)和路由物件(Route Object)。

應用程式物件

應用程式物件定義了應用程式的特性,例如語言、處理程式控制和檔案系統位置。以下是一個基本的 PHP 應用程式物件範例:

{
  "applications": {
    "my-app": {
      "type": "php",
      "processes": 4,
      "user": "www-data",
      "group": "www-data",
      "root": "/path/to/app",
      "index": "index.php"
    }
  }
}

內容解密:

這個 JSON 物件定義了一個名為 my-app 的 PHP 應用程式。它指定了應用程式的型別、處理程式數量、使用者和群組許可權,以及應用程式的根目錄和索引檔案。透過這個設定,NGINX Unit 可以正確地執行和管理 PHP 應用程式。

Mermaid NGINX Unit 安裝流程

  graph LR;
    A[開始] --> B{選擇安裝方式};
    B -->|從第三方儲存函式庫安裝| C[執行安裝指令];
    B -->|從原始碼安裝| D[下載原始碼];
    D --> E[編譯原始碼];
    E --> F[安裝 NGINX Unit];
    C --> G[完成安裝];
    F --> G;

圖表翻譯: 此圖示展示了 NGINX Unit 的安裝流程。首先,您需要選擇安裝方式。如果選擇從第三方儲存函式庫安裝,直接執行相應的安裝指令即可。如果選擇從原始碼安裝,則需要下載原始碼、編譯原始碼,最後安裝 NGINX Unit。無論哪種方式,最終都會完成 NGINX Unit 的安裝。