從套件管理器安裝 NGINX 可以快速上手,但版本可能稍舊;編譯原始碼則提供高度客製化彈性,例如針對嵌入式系統建置精簡版本,但也需要自行管理依賴套件。設定 NGINX 為系統服務,能確保伺服器重啟後自動執行,減少維護負擔。NGINX Plus 提供更豐富的企業級功能和專業支援,適合對穩定性和效能有更高要求的環境。本文涵蓋了 NGINX 的基礎組態、HTTP 模組、反向代理、負載平衡等核心概念,並搭配 PHP、Python 等後端整合,以及 Docker、Ansible 等現代化佈署工具的應用,提供讀者全面的 NGINX 使用。此外,本文也包含安全網站佈署、故障排除等實務案例,協助讀者應對真實世界的挑戰,並透過日誌分析和除錯策略,提升問題解決效率。

NGINX 佈署與管理

NGINX 是一款強大且靈活的網頁伺服器和反向代理,廣泛應用於各種網路環境中。本文旨在探討 NGINX 的下載、安裝、組態及其在多種情境下的應用,包括如何利用 NGINX 來構建高效、穩定且安全的網頁服務。以下是本文的主要內容架構與每一章節的簡要說明。

NGINX 下載與安裝

安裝與組態準備

玄貓將帶領讀者從零開始,完成 NGINX 的下載與安裝流程。這一章節將詳細介紹如何準備系統環境、下載並安裝 NGINX,以及如何確保其在系統重啟後仍能正常執行。透過這些基本步驟,讀者將能夠熟練掌握 NGINX 的安裝技巧,並且學會如何管理動態載入模組以提升系統的靈活性。

動態模組管理

NGINX 支援動態載入模組,這意味著我們可以根據需求隨時載入或解除安裝模組而不需要重新編譯 NGINX。這對於需要靈活組態的環境來說非常重要。玄貓將詳細介紹如何管理這些動態模組,並提供具體的例項來說明其應用。

作為系統服務執行

確保 NGINX 作為系統服務執行是非常重要的一步。這樣可以保證在系統重啟後,NGINX 也能自動啟動,從而減少人為干預。玄貓將教導讀者如何將 NGINX 組態為系統服務,並提供相關的 shell 指令和範例。

NGINX Plus 簡介

最後,本章節將簡要介紹 NGINX Plus,這是一款根據 NGINX 的商業版本。它擁有更多高階功能和專業支援,適合需要更高可靠性和更強大功能的企業使用者。

基礎組態

組態檔案語法與結構

NGINX 的組態檔案語法簡潔且強大,但對於初學者來說可能會有些困難。玄貓將從基本的組態檔案結構開始,帶領讀者逐步掌握組態檔案中的各項指令和引數設定。

基本指令

本文將介紹一些最基本且常用的指令,如 serverlocationproxy_pass 等。透過這些指令的學習,讀者將能夠瞭解如何進行基本的伺服器組態。

組態測試與驗證

組態完成後,如何測試和驗證組態是否正確執行是至關重要的一步。玄貓將介紹一些常用的測試策略和工具,幫助讀者快速發現和解決組態中的問題。

HTTP 模組探討

HTTP 模組概述

NGINX 的 HTTP 模組是其核心功能之一,負責處理所有 HTTP 相關的請求和回應。玄貓將探討這個模組的各項指令和引數設定,幫助讀者全面理解其工作原理。

核心模組

HTTP Core 模組是整個 HTTP 模組的基礎,掌握這部分內容對於後續學習至關重要。玄貓將詳細講解其主要指令及其應用場景。

Location 塊

Location 塊是 HTTP 模組中非常重要的一部分,它允許我們根據不同的 URL 路徑進行不同的處理。玄貓將介紹 Location 塊的語法及其常見應用場景。

探索模組組態

Rewrite 模組

Rewrite 模組是 NGINX 中另一個強大的功能模組,它允許我們對 URL 進行重寫操作。這對於 SEO 最佳化和網站重構非常有幫助。玄貓將詳細介紹 Rewrite 模組的使用方法及其常見應用場景。

美化 URL

透過 Rewrite 模組,我們可以實作「美化 URL」,即把複雜難懂的 URL 轉化為簡潔易記的 URL。這不僅有助於提升使用者經驗,還能有效地提升 SEO 排名。

FastCGI 與動態指令碼

FastCGI 原理

FastCGI 是一種高效率的 CGI 協定改進版本,它透過持久連線來提高處理速度和資源利用率。玄貓將探討 FastCGI 的工作原理及其優勢。

組態 PHP 和 Python

PHP 和 Python 是兩種廣泛使用的動態指令碼語言。玄貓將帶領讀者瞭解如何透過 FastCGI 協定組態 NGINX 與 PHP 和 Python 進行高效互動。

反向代理功能

反向代理概述

反向代理是 NGINX 的另一個強大功能,它可以隱藏後端伺服器並進行請求轉發。這對於分散式系統和負載平衡有著重要作用。玄貓將詳細講解反向代理的工作原理及其常見應用場景。

Proxy 模組

Proxy 模組是實作反向代理功能的核心模組。玄貓將詳細介紹該模組中的各項指令及其應用方法。

負載平衡與最佳化

負載平衡概述

負載平衡是指在多台伺服器之間分配請求流量以提升系統效能和可靠性。NGINX 提供了豐富的負載平衡策略供我們選擇。玄貓將介紹各種負載平衡策略及其優缺點。

I/O 最佳化

I/O 最佳化是提升系統效能的一個重要方面。玄貓將探討一些 I/O 最佳化技巧及其實作方法。

雲端基礎設施中的 NGINX

Docker 與 NGINX 整合

Docker 是目前最流行的一種容器技術,它可以幫助我們更好地管理應用程式佈署。玄貓將帶領讀者瞭解如何利用 Docker Compose 搭建根據 NGINX 的容器化應用程式環境。

高效容器化應用佈署

透過 Docker 與 NGINX 的整合,我們可以實作高效、靈活的應用佈署方式。玄貓將提供具體案例來說明其實作過程及優勢。

Ansible 自動化佈署

Ansible 基礎

Ansible 是一款自動化工具,適合於批次佈署和管理伺服器叢集。玄貓將介紹 Ansible 的基本概念及其使用方法。

自動化更新與維護

利用 Ansible 進行自動化更新和維護可以大大減少人力成本並提高系統穩定性。玄貓將提供具體範例來說明如何使用 Ansible 自動更新 NGINX 組態。

案例研究

安全網站佈署案例

安全性是網站佈署中至關重要的一環。玄貓將展示一些成功案例來說明如何利用 SSL 和 acme.sh 組態安全網站。

搭建安全 WordPress 網站

WordPress 是目前最受歡迎的一款網站建設工具之一。玄貓將講解如何透過 Docker 和 NextCloud 組態安全可靠的 WordPress 網站。

故障排除

常見故障排除技巧

故障排除是維運工作中不可避免的一部分。玄貓將提供一些常見故障排除技巧和工具來幫助讀者快速定位並解決問題。

日誌分析與除錯策略

日誌分析是故障排除中的重要手段之一。玄貓將介紹一些日誌分析技巧以及常見錯誤日誌中的解決方法。

本文適用環境與軟體/硬體需求

為了確保您從本文中獲得最佳體驗, 建議您使用以下作業系統,並確保您有以下軟體/硬體可供使用:

  • 作業系統: Linux(推薦使用Debian, Ubuntu, Fedora或RHEL)
  • 軟體: Nginx, Ansible, Docker

如果您使用的是本文數字版, 建議您手動輸入程式碼或從本文GitHub儲存函式庫中取得程式碼(後續章節中提供連結)。這樣做將幫助您避免由於複製貼上程式碼可能帶來的任何潛在錯誤。


### 下載示例程式碼檔案

您可以從GitHub上下載本文示例程式碼檔案:https://github.com/PacktPublishing/NGINX-HTTP-Server_Fifth-edition.如果程式碼有更新,將會在GitHub儲存函式庫中更新。
我們還提供其他豐富多彩書籍和影片系列中的程式碼捆綁包:https://github.com/PacktPublishing/。
檢查它們!

```markdown

## 本文約定事項

在此書中,我們使用了一些文字約定:
- **文字中的程式碼**: 用於標記文字中的程式碼單詞、資料函式庫表名、資料夾名、檔名、副檔名、路徑名、虛擬URL、使用者輸入以及Twitter控制程式碼等:
```nginx.conf    server {
    listen       80;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

- **命令列輸入/輸出**:以如下方式呈現:

apt update && apt install nginx -y

- **新術語/關鍵字**: 在螢幕上看到時會以粗體顯示.例如,選單名稱或對話方塊中的單詞會以粗體顯示:
- **重要注意事項**:
以類別似如下方式顯示:

tip or important notes appear like this.


## 本文約定事項 ## 您可以透過以下方式與我們聯絡:

- **一般反饋**:如果您對本文任何方面有問題,請發電子郵件至customercare@packtpub.com並在主題欄中提及書名。
- **勘誤表**:儘管我們已經盡力確保內容準確無誤,但錯誤仍然可能發生.如果您發現本文中的任何錯誤,我們將非常感激您能夠告知我們.請存取www.packtpub.com/support/errata並填寫表格.

希望這份引導幫助你快速瞭解本文內容並獲得寶貴知識!

NGINX 安裝與基礎設定:從零開始

在現代的網頁伺服器中,NGINX(發音為「engine-x」)無疑是長官者之一。自從2004年問世以來,它的主要目標是超越Apache,並在高流量網站或安全性方面表現出色。本文將探討NGINX的安裝與基礎設定,並提供實務經驗與個人洞察,讓讀者能夠從零開始建立功能完善的NGINX伺服器。

安裝NGINX

安裝NGINX是建立功能完善的網頁伺服器的第一步。以下將詳細介紹如何透過套件管理器安裝NGINX,以及如何從原始碼編譯自訂版本。

使用套件管理器安裝NGINX

最快速且簡單的安裝方式是使用作業系統提供的版本。大多數Linux發行版會保持這些套件相對更新,但有時候針對穩定性而專注的發行版可能只提供較舊的版本。

Red Hat Linux-based 系統

對於Red Hat Linux-based作業系統,首先需要啟用EPEL儲存函式庫:

yum install epel-release

接著搜尋並安裝NGINX:

yum search nginx
yum info PACKAGE_NAME
yum install PACKAGE_NAME
Debian-based 系統

對於Debian-based作業系統,首先搜尋可用的NGINX套件,然後取得所需套件的資訊:

apt-cache search nginx
apt-cache show PACKAGE_NAME
apt install PACKAGE_NAME

如果提供的版本已經足夠新,則可以進入下一章進行NGINX的設定。

NGINX 提供的套件

如果發行版提供的版本過舊,可以參考NGINX官方網站取得最新版本。以下是如何設定yum儲存函式庫來安裝NGINX:

  1. 建立一個名為 /etc/yum.repos.d/nginx.repo 的檔案,內容如下:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
  1. 替換 OSrhelcentos ,並替換 OSRELEASE89 ,根據你的發行版本。

  2. 安裝NGINX:

yum install nginx

對於Debian-based系統,首先需要新增NGINX的簽名金鑰:

sudo apt-key add nginx_signing.key

然後新增NGINX儲存函式庫到 /etc/apt/sources.list 中:

deb http://nginx.org/packages/debian/ codename nginx
deb-src http://nginx.org/packages/debian/ codename nginx

替換 codenametrixiebookworm ,根據你的Debian版本。對於Ubuntu,則使用以下依賴:

deb http://nginx.org/packages/ubuntu/ codename nginx
deb-src http://nginx.org/packages/ubuntu/ codename nginx

替換 codenamenoblefocalbionic ,根據你的Ubuntu版本。

最後,更新並安裝NGINX:

apt update
apt install nginx

自原始碼編譯NGINX

在某些情況下,從原始碼編譯NGINX更為適合。這種方式提供了最大的靈活性,讓你可以根據需要自訂模組。例如,你可以編譯一個精簡版本用於嵌入式硬體。

編譯前準備工作

在編譯之前,需要確保已經安裝了必要的依賴專案。以下是最常見的一些依賴專案:

  • GCC(GNU Compiler Collection)
  • PCRE(Perl Compatible Regular Expressions)
  • zlib(壓縮函式庫)
  • OpenSSL(加密函式庫)

安裝這些依賴專案可以使用以下命令:

sudo apt-get update
sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev libxml2 libxml2-dev libxslt1.1 libxslt1-dev wget unzip tar curl git -y

下載並解壓縮原始碼

接著下載並解壓縮NGINX原始碼:

wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0/

編譯與安裝

在解壓縮目錄中進行編譯和安裝:

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-pcre --with-zlib --with-openssl=/usr/local/src/openssl-1.1.1k --with-file-aio --with-threads --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_realip_module --with-http_realip_module --with-mail --with-mail_ssl_module --add-module=/path/to/nginx-module-path --with-openssl=/usr/local/src/openssl-1.1.1k --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --user=nginx --group=nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log

make && make install

內容解密:

以上步驟中包含了以下幾個重要部分:

  • 準備工作:確保系統中已經安裝了必要的編譯工具和依賴函式庫。
  • 下載原始碼:從官方網站下載最新版本的NGINX原始碼。
  • 組態選項:使用 ./configure 命令組態編譯選項。這些選項包括指定安裝字首、啟用SSL模組、PCRE模組等。
  • 編譯與安裝:使用 makemake install 命令進行編譯和安裝。

這樣,你就可以根據自己的需求自訂編譯選項,確保NGINX能夠滿足特定應用場景。

自動啟動組態

為了確保在系統啟動時自動啟動NGINX服務,可以使用systemd服務管理器來設定自動啟動。

建立systemd服務檔案

建立一個名為 /etc/systemd/system/nginx.service 的檔案,內容如下:

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload -c /usr/local/nginx/conf/nginx.conf

[Install]
WantedBy=multi-user.target

啟用並啟動服務

啟用並啟動該服務:

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

內容解密:

以上步驟中包含了以下幾個重要部分:

  • 建立服務檔案:在 /etc/systemd/system/ 目錄中建立一個新的servce檔案。
  • 組態單元:在 [Unit] 標題下組態單元相關資訊。
  • 組態服務:在 [Service] 標題下組態服務相關資訊。
  • 組態安裝:在 [Install] 標題下組態服務安裝相關資訊。
  • 啟用與啟動:使用systemctl命令來啟用與啟動服務。

這樣可以確保在系統每次啟動時自動啟動NGINX伺服器。

NGINX Plus 概覽

如果需要更高階別的功能和支援,可以考慮使用NGINX Plus。它提供了更多企業級特性和專業支援。

總結來說,透過以上步驟,玄貓成功地完成了NGINX的安裝與基礎設定。希望這些實務經驗和技術洞察能夠幫助讀者更好地理解和應用NGINX。