【為什麼寫這本書】
在互聯網與我們生活已密不可分的今天,大規模、高性能的網站架構技術已成為每個互聯網技術人員的技能。Nginx作為一款開源的Web服務器軟件,因其具有性能穩定、高並發、低內存耗用、高性能的處理能力等特點,而被廣泛應用到國內外各互聯網廠商的實際生產架構中。由於互聯網技術迭代非常快,雲計算、微服務等新技術層出不窮,Nginx也一直處於活躍開發的狀態,並在新版本中增加了很多強大的功能,與這些新技術緊密集成。同時基於其開源版本衍生出來的OpenResty和淘寶的Tengine等軟件也根據自身需求提供了優秀的擴展功能,滿足了雲計算、微服務等各種技術的應用需求,並在實際生產環境中得到了廣泛應用。
作為一款Web服務器軟件,Nginx實現了Web服務器的基本功能,用戶通過簡單的配置指令就可以快速完成Web服務器的搭建。它還是網絡通信協議處理軟件,支持TCP/UDP、HTTP、HTTP/2、gRPC、FastCGI、SCGI、uWSGI、WebDAV等協議的處理,並實現了相應通信協議的請求解析、長連接、代理轉發、負載均衡、會話保持等互聯網架構中常見的應用功能。同時,它還是一款高並發服務軟件,其采用的固定數量的多進程模型、事件驅動處理機制、工作流處理方式及模塊化架構等軟件開發設計,已成為高並發服務軟件開發的典範。
Nginx自誕生至今已有十幾年時間,雖然相關資料很多,但國內可獲得的資料很多是直接翻譯自官方文檔,這些資料讓讀者隻是停留在知其然而不知其所以然的層面,即便有深入講解某一功能的資料,也僅能讓讀者管中窺豹,而無法全面了解Nginx的功能並在實際工作中熟練應用。市面上的圖書或偏重於Nginx服務器的搭建,或偏重於Nginx的源碼解析,同時Nginx的新版本及雲計算、微服務等新技術迭代較快,這就導致市面上介紹Nginx技術實際應用及運維管理的資料稀少。而Nginx的用戶隻有理解了Nginx的各項指令參數的功用,纔能熟練對Nginx的各種功能進行靈活組合,以使其發揮的性能,進而在實際工作中解決各種問題。鋻於以上原因,本書分別從Nginx介紹、應用實戰、運維管理及與Kubernetes和微服務的應用集成4個部分來介紹Nginx的特點及運維管理實戰經驗,力求給從事互聯網技術工作的讀者帶來幫助。
【讀者對像】
本書的目標群體為具有一定Linux基礎的互聯網行業運維工程師、繫統架構師。因為Nginx可應用於Web服務、負載均衡、微服務等多個方面,所以本書也可作為開發工程師及軟件架構師的日常工作參考書。
【本書特色】
本書對開源版Nginx自有的配置指令進行了全面介紹和配置舉例,同時力求對涉及的技術術語及其原理進行闡述,使讀者可以深刻理解和掌握Nginx配置指令的配置方法。Nginx是一款網絡通信協議處理軟件,涉及大量網絡通信協議的處理方法,對於本書中每個涉及網絡通信協議的配置,筆者都對相關技術特點進行了介紹,使讀者可以結合配置案例掌握Nginx在不同應用場景下的使用方法。全書所涉及的軟件部署均采用了Docker化的部署方法,不僅充分利用了Docker容器的便捷部署方式,還滿足了目前容器化運維管理工作的技術需求。
Nginx現仍處於活躍開發中,本書基於Nginx版本及官方資料撰寫,對Nginx開源版本功能進行了完整介紹,還介紹了Nginx與目前比較流行的Kubernetes和微服務架構應用的集成。
【如何閱讀本書】
Nginx是一款非常優秀的開源軟件,筆者主要基於自身實際使用Nginx的經驗來分享Nginx的應用和運維方法。本書在邏輯上可分為4個部分,分別為Nginx介紹、應用實戰、運維管理,以及Nginx與Kubernetes、微服務的應用集成。
★部分Nginx介紹(第1~4章)
Nginx的個版本發布於2004年,經過多年的發展,逐漸演變出Nginx、Nginx Plus、Tengine、OpenResty這4個被廣泛應用的版本。本章分別介紹了這4個版本各自的特點,並通過對開源Nginx架構的特點及實現原理的介紹,使讀者對Nginx的功能有初步的了解。
Nginx是用C語言開發的,需要通過對源代碼進行編譯纔能獲得可運行的二進制文件。本章介紹了Nginx開源版本的編譯配置參數及Tengine、OpenResty兩個版本的擴展編譯配置參數和所集成的模塊,同時介紹了各個開源版本的編譯和基於Docker的編譯部署方法。
Nginx的配置是通過在配置文件中調整不同配置指令的指令值實現的。本章介紹了Nginx配置文件的目錄結構及主配置文件nginx.conf的文件結構,並對Nginx的進程及HTTP核心配置的配置指令進行了介紹和配置舉例。
Nginx 的HTTP模塊配置指令主要負責HTTP請求處理的配置。本章介紹了Nginx在動態賦值、訪問控制、數據處理這3個方面的配置指令和配置舉例。
★第二部分應用實戰(第5~8章)
Nginx 的一個基本功能是作為Web服務器提供HTTP服務,它支持對靜態頁面、動態腳本頁面、多媒體等文件的響應和處理。本章通過靜態文件服務器、HTTPS安全服務器、PHP網站搭建、Python網站搭建等實戰案例,介紹了Nginx作為Web服務的應用實戰。
Nginx支持HTTP、TCP、gRPC等多種協議的代理,通過上述代理功能,後端服務器可實現更靈活安全的部署。本章通過實戰案例介紹了Nginx代理相關配置指令的使用方法及需要關注的客戶端源IP問題的解決方案。
內容緩存是加速用戶訪問的常用技術。本章介紹了Nginx緩存模塊的配置指令,並通過客戶端緩存、代理緩存、鏡像緩存及Memcached集成等應用場景配置案例,介紹了Nginx作為緩存服務器的應用實戰。
Nginx通過上遊模塊與代理模塊共同實現了對後端服務器的訪問負載功能,Nginx支持HTTP、TCP/UDP、gRPC、FastCGI、uWSGI、SCGI、Memcached等協議的反向代理。本章詳細介紹了Nginx負載均衡相關的配置指令和官方自帶的負載均衡算法及實現原理。
★第三部分運維管理(第9~11章)
Nginx的日志分為訪問日志和錯誤日志兩種。日志的收集和分析是日常運維工作的重要內容,日志不僅可以幫助運維工程師排查Nginx的問題及優化Nginx的性能,還可以通過與ELK集成為其代理的網站應用提供安全、性能、可用性及運行的PV/UV等方面的數據,通過對這些數據進行不同維度的分析,可以了解如何提升網站應用的運維能力。
在Nginx的日常運維管理工作中,Nginx的監控管理是一項重要的工作,但開源版本Nginx自帶的監控數據采集能力相對較弱。本章介紹了開源Nginx與第三方模塊集成的方法,這些方法增強了Nginx的監控數據采集能力。本章還介紹了目前流行的監控工具Prometheus對Nginx服務器的監控、告警方法。另外還舉例介紹了監控工具Zabbix獲取Prometheus Exporter數據,以便在運維管理工作中實現統一化監控管理的方法。
高業務量的互聯網應用架構中,通常都是通過多組Nginx集群實現後端不同應用服務集群負載均衡的,本章介紹了基於Keepalived的Nginx集群的多層負載架構搭建,並舉例介紹了通過現有的開源軟件Jenkins、GitLab和Ansible組合,快速搭建一套Web化的Nginx集群配置管理框架的方法。
★第四部分Nginx與Kubernetes、微服務的應用集成(第12~13章)
- 第12章Nginx 在Kubernetes中的應用
Kubernetes是Google開源的分布式容器管理繫統,它實現了對容器的部署、網絡管理、負載調度、節點集群和資源的擴縮容等自動化管理功能。在該服務對外發布的方案中,Nginx 以 Nginx Ingress組件的方式為Kubernetes集群的Pod應用提供了訪問控制、認證管理、應用層代理、負載均衡等功能,使Kubernetes對集群中運行於容器的應用程序具有更靈活的應用層,以提供對外訪問的管理能力。本章介紹了Kubernetes的相關術語及網絡通信機制,讀者可通過相關網絡通信機制根據實際需求選擇Nginx Ingress的部署方式,並通過本章介紹的配置映射和注解這兩種不同的配置方式實現日常Nginx Ingress的配置管理工作。
近幾年,微服務架構技術發展迅猛,已成為目前主流的應用架構技術。在微服務架構中,Nginx也在微服務網關等微服務的核心組件中發揮著重要的作用。本章從軟件發展歷史的角度介紹了對微服務架構的認識,並舉例介紹了基於OpenResty的開源微服務網關軟件Kong作為微服務網關的應用配置方法。