如何在 Ubuntu 24.04/22.04/20.04 上從原始碼建置 NGINX

在 Ubuntu 上從原始碼建立 NGINX 提供了一種客製化的方法來配置您的 Web 伺服器,確保最佳效能和與您的特定環境的兼容性。與二進位安裝不同,從原始碼編譯 NGINX 可以靈活地啟用或停用特定模組、整合第三方模組以及套用自訂修補程式。此流程可讓您更深入了解伺服器的內部運作原理,並有助於根據您的獨特需求進行更安全、更有效率的配置。

建構 Nginx 的主要亮點:

  • 自訂配置: 透過僅啟用所需的模組來客製化 NGINX 以滿足您的需求。
  • 增強性能: 針對您的硬體和工作負載最佳化 NGINX,可能會縮短回應時間並提高資源利用率。
  • 進階功能: 存取預編譯包中可能不提供的尖端功能和模組。
  • 安全: 應用特定修補程式並使用安全強化選項進行編譯,以實現更安全的部署。
  • 學習機會: 深入了解 NGINX 的架構和配置選項。
  • 控制: 保持對伺服器設定的完全控制,包括目錄路徑和設定檔。
  • 最新: 建立最新版本的 NGINX,在軟體包發布之前存取新功能和錯誤修復。
  • 社區支持: 利用開源社群的豐富知識和資源進行故障排除和增強。

考慮到這些優勢,對於那些尋求從 Web 伺服器獲得最大控制和效率的人來說,從來源建立 NGINX 是一種強大的方法。

讓我們深入了解在 Ubuntu 上從原始碼建置 NGINX 的詳細步驟。

在 Ubuntu 上安裝 NGINX 來源的初始套件

在建置 NGINX 之前更新 Ubuntu

若要在 Ubuntu 上開始 NGINX 來源安裝,請先更新並升級您的系統。此步驟可確保所有系統的軟體包都是最新的,從而最大限度地減少潛在的相容性問題。

在終端機中執行以下命令來更新和升級您的系統:

sudo apt update && sudo apt upgrade

安裝NGINX編譯的依賴項

當您的系統是最新的時,下一步涉及安裝 NGINX 編譯所需的依賴項。這些套件(例如編譯器和函式庫)對於從原始程式碼建置 NGINX 至關重要。

若要安裝所需的依賴項,請執行以下命令:

sudo apt install build-essential libpcre3-dev libssl-dev zlib1g-dev libgd-dev

這個命令安裝幾個關鍵的包,每個包在 NGINX 編譯過程中發揮特定的作用:

  • build-essential:包含GCC編譯器和相關工具,這是從原始碼編譯軟體所必需的。
  • libpcre3-dev:提供 Perl 5 相容正規表示式支援的函式庫,這對於 URL 重寫和其他 NGINX 功能至關重要。
  • libssl-dev:提供 SSL/TLS 支援庫,確保安全資料傳輸,這是現代 Web 服務的關鍵方面。
  • zlib1g-dev:此軟體套件對於壓縮功能至關重要,有助於提高 NGINX 的效能和速度。
  • libgd-dev:支援影像處理功能,使得NGINX可以直接進行影像操作。

在 Ubuntu 上下載 NGINX 原始碼

選擇 NGINX 版本

安裝所需的依賴項後,繼續下載 NGINX 原始碼。造訪 NGINX 網站選擇適合您需求的版本。您可以選擇主線、穩定或任何特定版本。主線版本會定期更新最新功能和改進,而穩定版本則著重於生產環境經過充分測試的穩定性。

下載原始碼

下載所選版本的 NGINX, 使用 wget 命令。此命令可讓您直接從 Internet 下載檔案到您的伺服器。以下載主線版本1.23.3為例,使用以下指令:

wget http://nginx.org/download/nginx-x.x.x.tar.gz

筆記: 將版本號替換為您要安裝的最新版本或首選版本。請務必檢查 NGINX 網站以取得最新版本,以利用最新功能和安全性更新。請記住,主線版本可能每隔幾個月更新一次,因此了解最新版本對於維護安全且高效的伺服器環境至關重要。

提取 NGINX 原始碼

解壓縮 NGINX tarball

下載 NGINX 原始碼後,下一步是從 tarball 提取檔案。此過程涉及解壓縮 tar.gz 檔案以存取 NGINX 原始碼。使用 tar 帶有適當標誌的命令來提取內容。

以下是具體操作方法,以我們的範例版本 NGINX 1.23.3 為例:

tar -xzvf nginx-1.23.3.tar.gz

該命令分解如下:

  • x:解壓縮文件。
  • z:使用 gzip 解壓縮存檔。
  • v:詳細模式顯示擷取過程。
  • f:指定已存檔的檔案名稱。

變更至 NGINX 目錄

解壓縮檔案後,您需要切換到 NGINX 原始碼解壓縮後的目錄。此步驟對於開始編譯過程至關重要。

使用 cd 命令移動到提取的 NGINX 目錄:

cd nginx-1.23.3

在 Ubuntu 上配置 NGINX 的建置選項

設定配置選項

當準備從原始程式碼建置 NGINX 時,配置建置選項可以根據您的特定需求自訂安裝。利用 ./configure 命令設定路徑並啟用各種模組。這是一個包含常見配置選項和路徑的命令:

./configure --prefix=/var/www/html --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --with-pcre  --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-http_ssl_module --with-http_image_filter_module=dynamic --modules-path=/etc/nginx/modules --with-http_v2_module --with-stream=dynamic --with-http_addition_module --with-http_mp4_module

此指令為 NGINX 檔案設定各種路徑,並包含增強 NGINX 功能的模組,例如 SSL 支援和 HTTP/2 處理。

自訂您的 NGINX 構建

自訂 NGINX 建置時, ./configure 腳本是一個強大的工具,允許進行廣泛的自訂。以下是您如何自訂 NGINX 安裝以滿足特定要求:

配置範例

若要啟用 HTTP/2 支援並整合 PCRE 函式庫(這對於在 NGINX 中處理正規表示式至關重要),請使用下列配置:

./configure --with-http_v2_module --with-pcre

如果需要定義NGINX的安裝目錄,可以使用 --prefix 選項。例如,要將 NGINX 安裝在 /usr/local/nginx 目錄,指令為:

./configure --prefix=/usr/local/nginx

為了合併附加模組,例如 ngx_cache_purge, --add-module 選項開始發揮作用。若要包含此模組,配置將如下所示:

./configure --add-module=/path/to/ngx_cache_purge

使用 libxslt 或 libssl 等額外函式庫很簡單 --with-XXX-module 選項。要包含這些庫,相應的命令為:

./configure --with-libxslt-module
./configure --with-openssl=/path/to/openssl

若要啟動 SSL 和真實 IP 模組等模組,設定指令為:

./configure --with-http_ssl_module
./configure --with-http_realip_module

這些配置僅演示了您可以使用的幾種方法 ./configure 腳本來自訂您的 NGINX 建置。

有關所有可用選項的完整列表,您可以運行 ./configure --help。此命令提供有關可用於優化 NGINX 安裝的所有標誌和選項的詳細資訊。

開始編譯 NGINX 的最終過程

編譯 NGINX

設定 NGINX 的設定選項後,使用下列命令啟動編譯過程 make 命令。此命令根據中定義的參數編譯NGINX原始碼 ./configure 腳本。編譯過程會建立 NGINX 二進位可執行文件,通常可以在 objs 目錄。

make

安裝 NGINX

編譯 NGINX 後,使用以下命令繼續安裝 sudo make install。此命令將 NGINX 二進位檔案、設定檔和其他必要檔案安裝到指定的前綴路徑。如果您在設定過程中沒有定義不同的位置,NGINX 將會安裝到 /usr/local/nginx/ 預設情況下。

sudo make install

安裝完成後,您將在以下位置找到NGINX: sbin 指定前綴路徑內的目錄,準備進一步配置和使用。

建立 NGINX SystemD 服務

從原始程式碼成功建置和安裝 NGINX 後,下一步是使用 systemd 將 NGINX 作為服務進行管理。這將允許您像其他 Ubuntu 服務一樣啟動、停止和重新啟動 NGINX。

為 NGINX 建立 SystemD 服務文件

若要為 NGINX 設定 systemd 服務,請先建立一個新的服務檔案:

sudo nano /etc/systemd/system/nginx.service

在此文件中,輸入以下詳細信息,確保替換 /path/to/nginx 與 NGINX 二進位檔案的實際路徑(如果它不位於) /usr/sbin/nginx:

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
        
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
        
[Install]
WantedBy=multi-user.target

此配置將 NGINX 設定為服務,定義其啟動、停止和重新載入的方式,並確保其在網路上線後啟動。

重新載入 SystemD 以識別新服務

定義服務後,更新 systemd 以識別新的 NGINX 服務:

sudo systemctl daemon-reload

啟動並啟用 NGINX 服務

systemd 服務就位後,啟動 NGINX 服務:

sudo systemctl start nginx

為了確保 NGINX 在啟動時會自動啟動,請啟用該服務:

sudo systemctl enable nginx

驗證 NGINX 安裝

測試 NGINX 功能

安裝NGINX後,驗證其運作至關重要。您可以透過網頁瀏覽器造訪 NGINX 歡迎頁面。使用伺服器的本機主機位址或 IP 位址導覽至 NGINX 測試頁面。

開啟 Web 瀏覽器並輸入以下 URL 以使用本機主機存取 NGINX 歡迎頁面:

http://localhost

使用 IP 位址進行驗證

如果造訪本機主機沒有顯示 NGINX 歡迎頁面,您可以使用伺服器的 IP 位址。代替 192.128.1.1 與您的實際伺服器 IP 位址:

http://192.128.1.1

當您造訪這些 URL 時,您應該會看到預設的 NGINX 歡迎頁面,這表示 NGINX 已在您的 Ubuntu 伺服器上安裝並正確運作。如果該頁面未出現,請確保 NGINX 正在運作並且沒有防火牆規則阻止對該服務的存取。

建構 NGINX 的其他技巧

使用附加模組編譯 NGINX

透過在編譯過程中包含額外的模組來增強 NGINX 的功能。例如,如果您想要新增 NGINX HTTP 推送模組,請使用 --add-module 在配置步驟期間標記。依照下列命令使用 HTTP 推送模組編譯 NGINX:

./configure --add-module=/path/to/nginx-http-push-module
make
sudo make install

代替 /path/to/nginx-http-push-module 與您想要包含的模組的實際路徑。

使用 Systemctl 指令管理 NGINX

在 Ubuntu 上,使用 systemctl 指令管理 NGINX 服務非常簡單。以下是使用終端控制 NGINX 服務的方法:

啟動 NGINX:

sudo systemctl start nginx

停止 NGINX:

sudo systemctl stop nginx

重新啟動 NGINX:

sudo systemctl restart nginx

重新加載 NGINX:

sudo systemctl reload nginx

NGINX 狀態檢查

sudo systemctl status nginx

在系統啟動時啟用 NGINX

sudo systemctl enable nginx

在系統啟動時停用 NGINX:

sudo systemctl disable nginx

結論

在本指南中,我們介紹如何在 Ubuntu 24.04、22.04 和 20.04 上從原始程式碼建置 NGINX,從安裝軟體套件到管理服務。此過程可讓您使用額外的模組自訂 NGINX 並使用 systemctl 控制它。保持 NGINX 更新並正確配置以獲得最佳效能和安全性。嘗試這些設定並在 Ubuntu 上享受您的 NGINX 伺服器。

Joshua James
跟我來
Joshua James 的最新帖子 (看全部)