Docker從零開始搭建、配置與深度理解?Nginx?服務(wù)(探索Nginx的旅程)
前言
在當今的互聯(lián)網(wǎng)世界,無論您是初出茅廬的開發(fā)者、經(jīng)驗豐富的系統(tǒng)管理員,還是充滿好奇心的技術(shù)愛好者,理解并掌握 Web 服務(wù)器技術(shù)都是一項至關(guān)重要的技能。而在眾多 Web 服務(wù)器軟件中,Nginx 以其卓越的性能、穩(wěn)定性和豐富的功能,成為了現(xiàn)代網(wǎng)絡(luò)架構(gòu)的基石。
本文將以一篇詳盡的教程為基礎(chǔ),帶您踏上探索 Nginx 的旅程。我們不僅會手把手地指導(dǎo)您如何在 CentOS 和 Ubuntu 這兩個主流的 Linux 發(fā)行版上安裝和配置 Nginx,更將深入剖析其背后的核心概念——從 Web 服務(wù)器的基本原理到正向代理與反向代理的精妙之處。本文旨在“授人以漁”,讓您在完成搭建后,不僅知其然,更知其所以然。
第一章:Web 服務(wù)器的宏觀世界
在深入 Nginx 的具體細節(jié)之前,我們必須首先建立一個清晰的宏觀認知:什么是 Web 服務(wù)器?它在浩瀚的互聯(lián)網(wǎng)中扮演著怎樣的角色?
1.1 Web 服務(wù)器的核心定義
Web 服務(wù)器,通常也被稱為“網(wǎng)站服務(wù)器”或“WWW (World Wide Web) 服務(wù)器”,其本質(zhì)上是一個安裝在計算機上的程序。這個程序的核心使命是“監(jiān)聽”來自網(wǎng)絡(luò)的請求,并根據(jù)請求的內(nèi)容,“響應(yīng)”相應(yīng)的資源。
可以將其想象成一個 24 小時營業(yè)的超級圖書館。當您(客戶端,通過瀏覽器)想要查閱一本書(一個網(wǎng)頁或文件)時,您向圖書館管理員(Web 服務(wù)器)遞交一個請求(URL 地址)。管理員會根據(jù)您的請求,在館藏(服務(wù)器的硬盤)中找到這本書,然后復(fù)印一份(生成響應(yīng)內(nèi)容)給您。
這個過程主要遵循 HTTP(超文本傳輸協(xié)議)或其加密版本 HTTPS。
- 客戶端 (Client):通常是用戶的網(wǎng)頁瀏覽器(如 Chrome, Firefox),也可以是手機 App、爬蟲程序或其他任何能發(fā)起網(wǎng)絡(luò)請求的軟件。
- 服務(wù)器 (Server):即運行著 Web 服務(wù)器軟件(如 Nginx, Apache)的計算機。
- 請求 (Request):客戶端向服務(wù)器索要信息的操作,例如“GET /index.html HTTP/1.1”。
- 響應(yīng) (Response):服務(wù)器返回給客戶端的信息,例如網(wǎng)頁的 HTML 代碼、圖片、CSS 文件或一個錯誤代碼。
所以,Web 服務(wù)器的核心功能可以概括為:
- 存儲資源:存放構(gòu)成網(wǎng)站的所有文件,包括 HTML、CSS、JavaScript、圖片、視頻、數(shù)據(jù)文件等。
- 處理請求:接收并解析來自客戶端的 HTTP 請求。
- 提供內(nèi)容:根據(jù)請求,將存儲的靜態(tài)資源原封不動地發(fā)送給客戶端,或者將請求傳遞給其他程序(如應(yīng)用服務(wù)器)處理,再將處理結(jié)果返回給客戶端。
1.2 WWW:引爆互聯(lián)網(wǎng)革命的引擎
文章開篇提到,“WWW 是 Internet(互聯(lián)網(wǎng))的多媒體信息查詢工具,是 Internet(互聯(lián)網(wǎng))上發(fā)展起來的服務(wù),也是發(fā)展最快和目前使用最廣泛的服務(wù)。” 這句話精準地指出了 Web 技術(shù)的歷史地位。
在 WWW 出現(xiàn)之前,互聯(lián)網(wǎng)雖然存在,但更多是學(xué)者和軍方使用命令行工具進行文件傳輸(FTP)或郵件(SMTP)的工具,使用門檻極高。WWW 的誕生,通過超鏈接(Hyperlink)和統(tǒng)一資源定位符(URL)將信息組織成一張巨大的網(wǎng),并通過瀏覽器這一圖形化工具,使得任何人都能輕松地“點擊”和“瀏覽”,極大地降低了信息獲取的難度。
正是因為有了 Web 服務(wù)器和瀏覽器這對黃金組合,才催生了近幾十年來互聯(lián)網(wǎng)的爆炸式增長,全球數(shù)十億人得以連接,形成了我們今天所熟知的數(shù)字社會。
文中展示了一張百度首頁的圖片,這便是一個絕佳的例證。

這張圖片清晰地展示了百度的搜索界面。當您在瀏覽器地址欄輸入 www.baidu.com 并回車時,您的瀏覽器就向百度的 Web 服務(wù)器集群發(fā)送了一個 HTTP 請求。百度的服務(wù)器接收到請求后,返回了構(gòu)成這個搜索頁面的 HTML、CSS、JavaScript 和圖片資源,最終由您的瀏覽器渲染成這個我們所熟悉的交互界面。這背后,正是由成千上萬臺高性能的 Web 服務(wù)器在協(xié)同工作。
1.3 靜態(tài)內(nèi)容與動態(tài)內(nèi)容
Web 服務(wù)器處理的內(nèi)容主要分為兩類:
- 靜態(tài)內(nèi)容:指那些預(yù)先制作好、內(nèi)容固定的文件,如 HTML 頁面、圖片、CSS 樣式表等。對于這類請求,Web 服務(wù)器就像一個文件搬運工,直接從硬盤讀取文件并發(fā)送給客戶端,速度極快。
- 動態(tài)內(nèi)容:指那些需要程序?qū)崟r生成的內(nèi)容。例如,您在百度的搜索結(jié)果、淘寶的商品列表、微博的信息流,這些內(nèi)容都是根據(jù)您的請求參數(shù)、時間、用戶身份等因素動態(tài)生成的。在這種情況下,Web 服務(wù)器通常會扮演一個“二傳手”的角色,它自身不處理業(yè)務(wù)邏輯,而是將請求轉(zhuǎn)發(fā)給后端的應(yīng)用服務(wù)器(如 Tomcat, Node.js, PHP-FPM),由應(yīng)用服務(wù)器處理完畢后返回數(shù)據(jù),Web 服務(wù)器再將這些數(shù)據(jù)整理成 HTTP 響應(yīng)格式發(fā)送給客戶端。
Nginx 在處理靜態(tài)內(nèi)容方面效率極高,這也是其廣受歡迎的重要原因之一。
第二章:Nginx 深度解析——不止是 Web 服務(wù)器
現(xiàn)在,讓我們聚焦于今天的主角——Nginx。
2.1 Nginx 是什么?
原文給出了一個非常精準的定義:“Nginx 是一款自由的、開源的、高性能的 HTTP 服務(wù)器和反向代理服務(wù)器;同時也是一個 IMAP、POP3、SMTP 代理服務(wù)器。”
讓我們來逐一拆解這個定義:
- 自由、開源:意味著您可以免費下載、使用、修改甚至分發(fā) Nginx 的源代碼,這極大地促進了其社區(qū)的發(fā)展和生態(tài)的繁榮。
- 高性能:這是 Nginx 最核心的標簽。它的高性能源于其獨特的架構(gòu)設(shè)計。與傳統(tǒng)的 Apache 服務(wù)器為每個連接創(chuàng)建一個進程或線程不同,Nginx 采用了基于事件驅(qū)動的、異步非阻塞的架構(gòu)。它可以用極少的幾個工作進程(worker process)處理成千上萬個并發(fā)連接,極大地節(jié)省了服務(wù)器的內(nèi)存和 CPU 資源,特別是在高并發(fā)場景下優(yōu)勢盡顯。這就是著名的“C10K 問題”(即單機如何處理 1 萬個并發(fā)連接)的優(yōu)秀解決方案。
- HTTP 服務(wù)器:這是它的本職工作,即作為 Web 服務(wù)器發(fā)布網(wǎng)站,處理靜態(tài)文件請求。如下圖所示,Nginx 接收來自各種客戶端(手機、電腦、平板)的請求,并提供網(wǎng)頁瀏覽服務(wù)。

- 反向代理服務(wù)器:這是 Nginx 在現(xiàn)代架構(gòu)中扮演的更重要的角色。我們稍后會詳細展開。
- 郵件代理服務(wù)器:Nginx 也可以代理 IMAP/POP3/SMTP 郵件協(xié)議,為郵件系統(tǒng)提供反向代理和負載均衡,雖然這個用途相對較少被提及。
可以這樣理解:將 Web 服務(wù)器視為一個職業(yè),那么 Nginx 就是這個職業(yè)中的一位全能型頂尖高手。
2.2 理解代理:正向代理與反向代理
“代理”(Proxy)一詞的本質(zhì)是“代表某人/某物去執(zhí)行某個動作”。在網(wǎng)絡(luò)世界中,代理服務(wù)器是客戶端和目標服務(wù)器之間的中間人。理解正向代理和反向代理的區(qū)別,對于掌握 Nginx 的精髓至關(guān)重要。
2.2.1 正向代理 (Forward Proxy)
核心:代理客戶端,為客戶端服務(wù)。
原文中用訪問谷歌的例子來解釋正向代理,非常貼切。

如上圖所示,假設(shè)您在國內(nèi)無法直接訪問 Google。此時,您可以通過一個 VPN(虛擬專用網(wǎng)絡(luò))或其他的代理服務(wù)器來訪問。整個流程是這樣的:
- 您的電腦(客戶端)向代理服務(wù)器發(fā)送一個請求:“我想訪問 Google”。
- 代理服務(wù)器收到您的請求后,它代替您,向真正的 Google 服務(wù)器發(fā)送了請求。
- Google 服務(wù)器處理請求,將響應(yīng)內(nèi)容返回給代理服務(wù)器。
- 代理服務(wù)器再將收到的內(nèi)容轉(zhuǎn)發(fā)給您的電腦。
在這個過程中,有幾個關(guān)鍵點:
- 客戶端明確知道目標:您清楚地知道自己想訪問的是 Google。
- 客戶端也明確知道自己在用代理:您需要主動配置和連接代理服務(wù)器。
- 目標服務(wù)器不知道真實的客戶端:對于 Google 來說,它只看到是那臺代理服務(wù)器在訪問它,而不知道這背后其實是您。
- 典型用途:突破網(wǎng)絡(luò)限制、為局域網(wǎng)內(nèi)的設(shè)備提供統(tǒng)一的網(wǎng)絡(luò)出口、訪問控制和內(nèi)容過濾、隱藏客戶端身份。
總結(jié)一句話:正向代理,“代理”的是客戶端,隱藏了真實的客戶端。
2.2.2 反向代理 (Reverse Proxy)
核心:代理服務(wù)器端,為服務(wù)器服務(wù)。
原文用訪問百度的例子來解釋反向代理。

當您訪問 www.baidu.com 時,您的請求首先到達的可能并不是真正處理搜索邏輯的服務(wù)器,而是一臺或一組 Nginx 反向代理服務(wù)器。這臺 Nginx 服務(wù)器會根據(jù)一定的規(guī)則,將您的請求“轉(zhuǎn)發(fā)”到內(nèi)部網(wǎng)絡(luò)中成千上萬臺應(yīng)用服務(wù)器中的某一臺去處理。
在這個過程中:
- 客戶端不知道目標:作為用戶,您只知道自己訪問的是
www.baidu.com,您完全不知道、也不需要關(guān)心背后是哪一臺具體的服務(wù)器為您提供了服務(wù)。這個過程對您是“透明的”。 - 服務(wù)器端被代理:Nginx 代理了后端的真實業(yè)務(wù)服務(wù)器。
- 典型用途:這是反向代理的精髓所在,也是 Nginx 大放異彩的地方。
- 負載均衡 (Load Balancing):當后端有多臺服務(wù)器時,反向代理可以根據(jù)預(yù)設(shè)的策略(如輪詢、按權(quán)重、按 IP 地址等)將請求分發(fā)給這些服務(wù)器,避免單臺服務(wù)器壓力過大,提高了整個系統(tǒng)的處理能力和可用性。
- 安全屏障:只有反向代理服務(wù)器暴露在公網(wǎng)上,后端的應(yīng)用服務(wù)器則隱藏在內(nèi)網(wǎng)中,避免了直接攻擊,起到了防火墻的作用。
- SSL/TLS 卸載:HTTPS 的加解密計算非常消耗 CPU 資源??梢詫⒓咏饷艿墓ぷ魅拷唤o前端的 Nginx 來做,后端應(yīng)用服務(wù)器則可以專注于業(yè)務(wù)邏輯處理,無需再配置復(fù)雜的 SSL 證書。
- 動靜分離:Nginx 可以根據(jù)請求的 URL,將靜態(tài)文件(.jpg, .css, .js 等)請求直接自己處理,而將動態(tài)請求(.jsp, .php 等)轉(zhuǎn)發(fā)給后端的應(yīng)用服務(wù)器。這充分利用了 Nginx 處理靜態(tài)文件的高性能優(yōu)勢。
- 數(shù)據(jù)緩存:Nginx 可以緩存后端服務(wù)器返回的內(nèi)容。對于不經(jīng)常變化的數(shù)據(jù),當再次有相同請求時,Nginx 可以直接返回緩存中的內(nèi)容,而無需再次請求后端服務(wù)器,極大地加快了響應(yīng)速度并降低了后端負載。
總結(jié)一句話:反向代理,“代理”的是服務(wù)器,隱藏了真實的服務(wù)器。
學(xué)到這里,您應(yīng)該已經(jīng)對 Nginx 的強大功能有了全面的理論認識。接下來,我們將進入激動人心的實戰(zhàn)環(huán)節(jié),親手搭建一個屬于自己的 Nginx 服務(wù)。
第三章:在 CentOS 7 上安裝與配置 Nginx
我們將首先在 CentOS 7 這個廣泛使用的企業(yè)級 Linux 發(fā)行版上進行操作。
3.1 準備工作:檢查與卸載舊版本
在安裝新軟件之前,一個良好的習(xí)慣是檢查系統(tǒng)上是否已存在舊版本,以避免潛在的沖突。
步驟 1:檢查 Nginx 進程
打開您的終端,輸入以下命令:
ps -ef | grep nginx
這個命令會列出系統(tǒng)中所有正在運行的進程,并通過管道符 | 將結(jié)果傳遞給 grep nginx,從而篩選出包含 “nginx” 關(guān)鍵字的進程。
ps -ef:ps是 process status 的縮寫,-e顯示所有進程,-f提供完整的格式化輸出。
如下圖所示,如果命令執(zhí)行后,除了您剛剛輸入的 grep 命令本身之外,沒有任何其他輸出,那么恭喜您,您的系統(tǒng)是干凈的,可以直接跳到安裝步驟。

步驟 2:處理已存在的 Nginx
如果您的輸出類似下圖,顯示了 nginx: master process 和 nginx: worker process 等行,說明系統(tǒng)上已經(jīng)有一個 Nginx 實例在運行。

在卸載之前,我們需要先停止它。最直接的方法是殺死主進程 (master process)。在圖中,主進程的 PID (Process ID) 是 19085。執(zhí)行:
kill 19085
注意:請將
19085替換為您自己看到的 master 進程的 PID。
步驟 3:卸載 Nginx 軟件包
如果您的 Nginx 是通過 yum(CentOS 的包管理器)安裝的,那么卸載它就非常簡單。執(zhí)行以下命令:
yum remove nginx
系統(tǒng)會提示您將要卸載的軟件包以及相關(guān)的依賴,輸入 y 并回車確認即可。

這張截圖展示了 yum remove nginx 命令的執(zhí)行過程,系統(tǒng)確認了要移除的 nginx 包,并在用戶同意后完成了卸載操作。
3.2 通過 Yum 源安裝 Nginx
CentOS 默認的軟件倉庫中可能不包含最新版本的 Nginx,或者根本不包含 Nginx。因此,最佳實踐是添加 Nginx 官方提供的 yum 倉庫,這樣我們就能安裝到最新、最穩(wěn)定的版本。
步驟 1:添加 Nginx 官方源
執(zhí)行以下命令,該命令會下載并安裝一個 RPM 包,這個包的作用是在您的系統(tǒng)中配置好 Nginx 的 yum 倉庫信息。
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
rpm: Red Hat Package Manager,是 CentOS/RHEL 系列的軟件包管理工具。-Uvh:-U表示升級或安裝(Upgrade),-v表示顯示詳細過程(Verbose),-h表示以#形式顯示安裝進度(Hash)。
命令執(zhí)行成功后,您會看到類似下圖的輸出,提示正在準備并安裝 nginx-release 包。

步驟 2:驗證源文件是否添加成功
我們可以檢查一下 yum 的倉庫配置目錄,看看是否多出了 Nginx 的配置文件。
cd /etc/yum.repos.d/ ls
執(zhí)行后,您應(yīng)該能看到一個名為 nginx.repo 的新文件,如下圖所示。這個文件告訴了 yum 在安裝 Nginx 時應(yīng)該去哪里下載。

步驟 3:構(gòu)建緩存以加速下載
為了讓新添加的倉庫生效,并提高后續(xù)的下載速度,我們建議執(zhí)行一次緩存構(gòu)建命令:
yum makecache
該命令會下載倉庫的元數(shù)據(jù)(包含軟件包列表、依賴關(guān)系等),并緩存在本地。

上圖顯示了 yum makecache 命令正在從各個配置好的源(包括我們剛剛添加的 nginx 源)下載元數(shù)據(jù),并生成緩存。
步驟 4:安裝 Nginx
萬事俱備,現(xiàn)在只需一條命令即可完成 Nginx 的安裝:
yum install nginx -y
-y: 表示在安裝過程中遇到所有詢問都自動回答“是”,省去了手動確認的步驟。
安裝過程會下載 Nginx 及其依賴的軟件包,并自動完成配置。安裝成功后,會顯示 “Complete!” 的字樣。

3.3 啟動與驗證 Nginx 服務(wù)
安裝完成后,Nginx 并不會自動啟動。我們需要手動啟動它,并進行驗證。
步驟 1:檢查 Nginx 狀態(tài)
再次運行我們熟悉的命令:
ps -ef | grep nginx
如下圖所示,此時應(yīng)該還是沒有任何 Nginx 進程在運行。

步驟 2:手動啟動 Nginx
我們可以先查看一下剛剛安裝的 Nginx 版本:```bash
nginx -v
然后,直接在命令行輸入 `nginx` 即可啟動服務(wù):```bash nginx
這個命令會以后臺守護進程的方式啟動 Nginx。啟動后不會有任何提示,光標會直接回到下一行。此時,再次運行 ps -ef | grep nginx,您就應(yīng)該能看到 master 和 worker 進程了,如下圖所示。

步驟 3:通過瀏覽器訪問
現(xiàn)在,打開您本地電腦的瀏覽器,在地址欄輸入您云服務(wù)器的公網(wǎng) IP 地址。如果一切順利,您應(yīng)該能看到 Nginx 的歡迎頁面!

這個頁面的出現(xiàn),標志著您的 Nginx Web 服務(wù)器已經(jīng)成功搭建并運行在公網(wǎng)上。
常見問題:無法訪問?
如果您無法看到這個頁面,99% 的可能性是服務(wù)器的防火墻攔截了訪問。Web 服務(wù)默認使用 80 端口(HTTP),您需要在服務(wù)器的安全組或防火墻設(shè)置中,放行 80 端口的入站流量。
對于 CentOS 7 默認的 firewalld 防火墻,您可以執(zhí)行以下命令開放 80 端口:
# 添加 80 端口到 public 區(qū)域(永久生效) sudo firewall-cmd --permanent --zone=public --add-service=http # 或者直接添加端口 # sudo firewall-cmd --permanent --zone=public --add-port=80/tcp # 重新加載防火墻規(guī)則使其生效 sudo firewall-cmd --reload
3.4 Nginx 配置文件與首頁修改
知其然,更要知其所以然。讓我們來探索一下 Nginx 的配置文件,看看它是如何工作的,并嘗試修改默認的歡迎頁面。
步驟 1:定位主配置文件
通過 yum 安裝的 Nginx,其配置文件通常位于 /etc/nginx/ 目錄下。
cd /etc/nginx/ ls -l
您會看到一系列文件和目錄,其中最核心的是 nginx.conf。

步驟 2:分析配置文件結(jié)構(gòu)
我們用 cat 或 vim 查看 nginx.conf 文件的內(nèi)容。您會發(fā)現(xiàn),這個文件定義了 Nginx 的全局行為,比如運行用戶、工作進程數(shù)等。而在 http 塊的末尾,有一行非常關(guān)鍵的代碼:
include /etc/nginx/conf.d/*.conf;

這行代碼的意思是:加載 /etc/nginx/conf.d/ 目錄下所有以 .conf 結(jié)尾的文件。這是一種模塊化的配置方式,使得我們可以為不同的網(wǎng)站創(chuàng)建不同的配置文件,而無需修改主配置文件,便于管理。
步驟 3:探究默認的服務(wù)器配置
我們進入 /etc/nginx/conf.d/ 目錄,會發(fā)現(xiàn)一個 default.conf 文件。這個文件定義了我們剛剛訪問的那個默認網(wǎng)站的行為。讓我們查看它的內(nèi)容。

在這張截圖中,我們看到了幾個關(guān)鍵指令:
server { ... }: 定義了一個虛擬主機(一個網(wǎng)站)。listen 80;: 表示這個虛擬主機監(jiān)聽 80 端口。這就是為什么我們通過 HTTP 訪問能看到它。server_name localhost;: 定義了服務(wù)器的名稱。root /usr/share/nginx/html;: 這是核心! 它指定了該網(wǎng)站的根目錄。也就是說,當用戶訪問時,Nginx 會到這個目錄下尋找文件。location / { ... }: 定義了如何處理對根路徑 (/) 的請求。
步驟 4:找到并修改首頁文件
根據(jù) root 指令的路徑,我們來到 /usr/share/nginx/html 目錄。
cd /usr/share/nginx/html ls
您會看到 index.html 和 50x.html 兩個文件。index.html 就是我們看到的那個歡迎頁面。

現(xiàn)在,我們使用文本編輯器(如 vim)來修改它。
vim index.html
找到 <h1>Welcome to nginx!</h1> 這一行,把它修改成您想要的任何內(nèi)容,比如 <h1>Hello, My First Nginx!</h1>。

保存并退出 vim。此時,無需重啟 Nginx,直接刷新您的瀏覽器頁面,您會驚喜地發(fā)現(xiàn),網(wǎng)頁內(nèi)容已經(jīng)變成了您修改后的樣子!

這個簡單的修改,完整地展示了從“請求 URL”到“Nginx 配置文件”再到“服務(wù)器磁盤文件”的整個工作流程。
3.5 Nginx 常用命令
nginx:啟動 Nginx。nginx -s stop:快速停止 Nginx。nginx -s quit:優(yōu)雅地停止 Nginx(等待所有請求處理完畢)。nginx -s reload:重新加載配置文件(這是最常用的命令,當您修改了配置文件后,執(zhí)行此命令使配置生效,服務(wù)不會中斷)。nginx -t:測試配置文件是否有語法錯誤。在執(zhí)行reload前,先執(zhí)行此命令是一個好習(xí)慣。
推薦使用 systemd 來管理服務(wù),因為它更現(xiàn)代化、功能更強大:
sudo systemctl start nginx:啟動sudo systemctl stop nginx:停止sudo systemctl restart nginx:重啟sudo systemctl reload nginx:重新加載配置sudo systemctl status nginx:查看狀態(tài)sudo systemctl enable nginx:設(shè)置開機自啟
第四章:在 Ubuntu 上安裝與配置 Nginx
接下來,我們將在另一個非常流行的 Linux 發(fā)行版——Ubuntu 上重復(fù)這個過程。雖然大同小異,但在包管理和文件路徑上會有一些區(qū)別。
4.1 準備工作:檢查與卸載舊版本
步驟 1:檢查 Nginx 進程
與 CentOS 一樣,我們首先檢查進程:
ps -ef|grep nginx
下圖中,我們可以看到 Nginx 正在運行,主進程 PID 為 2318。

步驟 2:停止并卸載 Nginx
首先,殺死正在運行的 Nginx 進程。```bash
kill 2318
或者更穩(wěn)妥的方式
sudo kill 2318```

接下來是卸載。在 Ubuntu 上,包管理器是 apt。我們需要先確定 Nginx 是如何安裝的。
方法一:通過 apt 源安裝的 Nginx
我們可以用 dpkg 命令來查詢軟件包信息:
dpkg -l | grep nginx
如果能看到類似下圖的輸出,說明 Nginx 是通過 apt 系統(tǒng)安裝的。

對于這種情況,卸載非常簡單,執(zhí)行以下命令即可徹底清除 Nginx 及其配置文件和依賴:
sudo apt --purge autoremove nginx
--purge: 表示不僅卸載軟件包,還要刪除其全局配置文件。autoremove: 表示同時移除作為依賴項安裝且現(xiàn)在不再需要的軟件包。
方法二:非 apt 方式安裝的 Nginx (如編譯安裝)
如果 dpkg -l 查不到信息,或者您知道 Nginx 是通過編譯等其他方式安裝的,那么卸載過程會復(fù)雜一些,需要手動刪除相關(guān)文件。原文提供了一個非常詳盡的手動卸載步驟,這對于處理一些“疑難雜癥”非常有用。

找出所有 Nginx 相關(guān)文件位置:
which nginx # 查找可執(zhí)行文件 whereis nginx # 查找二進制、源碼和 man 頁面
刪除可執(zhí)行文件或符號鏈接:
sudo rm -f /usr/sbin/nginx /usr/bin/nginx
再次確認并殺死所有 Nginx 進程:
sudo pkill -9 nginx
清除 systemd 服務(wù)文件(如果存在):
sudo rm -f /etc/systemd/system/nginx.service sudo systemctl daemon-reload
刪除其他相關(guān)目錄(這步要非常小心,確保不會誤刪):
sudo rm -rf /etc/nginx sudo rm -rf /var/log/nginx sudo rm -rf /var/cache/nginx
最終驗證:
which nginx nginx -v
如果命令都提示找不到,說明卸載干凈了。如下圖所示,which nginx 沒有任何輸出,表示已成功卸載。

4.2 通過 Apt 源安裝 Nginx
在 Ubuntu 上通過 apt 安裝 Nginx 非常直接。
步驟 1:更新軟件包列表
在安裝任何新軟件前,都應(yīng)該先更新本地的軟件包索引,以確保能獲取到最新的版本信息。
sudo apt update
步驟 2:安裝 Nginx
執(zhí)行安裝命令:
sudo apt install nginx -y
apt 會自動處理所有依賴關(guān)系并完成安裝。
4.3 啟動與驗證 Nginx 服務(wù)
步驟 1:檢查服務(wù)狀態(tài)
通過 apt 安裝的服務(wù)通常會自動啟動。我們可以用 ps 命令或 systemd 命令來驗證。
ps -ef | grep nginx
如下圖所示,安裝完成后,Nginx 的 master 和 worker 進程已經(jīng)在運行了。

步驟 2:查看版本
我們可以通過指定完整路徑來查看 Nginx 版本:
/usr/sbin/nginx -v

小貼士:關(guān)于環(huán)境變量 PATH
如果在終端直接輸入 nginx -v 提示命令找不到,這可能是因為 /usr/sbin 目錄不在當前用戶的 PATH 環(huán)境變量中。PATH 變量告訴系統(tǒng)去哪些目錄尋找可執(zhí)行文件。
我們可以通過 which nginx 找到其絕對路徑。

如果需要,可以將其永久添加到 PATH:
echo 'export PATH=$PATH:/usr/sbin' >> ~/.bashrc source ~/.bashrc
這樣,下次登錄時就可以直接使用 nginx 命令了。
步驟 3:瀏覽器訪問
同樣,在瀏覽器中輸入您的 Ubuntu 服務(wù)器的公網(wǎng) IP。這時,您可能會看到一個與 CentOS 不同的歡迎頁面,上面寫著 “Welcome to nginx!” 并包含一些 Ubuntu 的信息。

有時候,特別是在一個已經(jīng)安裝了 Apache 的系統(tǒng)上,您可能會看到一個默認的 Apache 或 Ubuntu 的占位頁面,如下圖所示。

這通常是因為默認的虛擬主機配置指向了另一個目錄。接下來,我們將學(xué)習(xí)如何修改它,讓它顯示我們想要的 Nginx 默認頁面。
4.4 Nginx 配置文件與首頁修改 (Ubuntu 版)
Ubuntu 上的 Nginx 配置文件結(jié)構(gòu)與 CentOS 略有不同,更加模塊化。
步驟 1:定位主配置文件
主配置文件仍然是 /etc/nginx/nginx.conf。
cd /etc/nginx

步驟 2:分析配置文件結(jié)構(gòu)
查看 nginx.conf 文件,您會發(fā)現(xiàn)它的 include 指令與 CentOS 有所不同:
include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;

這里的 sites-enabled 是 Ubuntu/Debian 系 Nginx 配置的特色。其設(shè)計哲學(xué)是:
/etc/nginx/sites-available/:存放所有可用的網(wǎng)站配置文件(每個網(wǎng)站一個文件)。/etc/nginx/sites-enabled/:存放一個符號鏈接(shortcut),鏈接到sites-available中你想要“激活”的網(wǎng)站配置文件。
這種方式使得啟用或禁用一個網(wǎng)站變得非常簡單,只需在 sites-enabled 目錄中創(chuàng)建或刪除一個符號鏈接即可,而無需修改配置文件本身。
步驟 3:探究默認的服務(wù)器配置
我們進入 sites-enabled 目錄查看。
cd /etc/nginx/sites-enabled/ ls -l
您會看到一個名為 default 的文件,它是一個指向 ../sites-available/default 的符號鏈接。

我們編輯這個 default 文件(實際上就是編輯 sites-available/default):
sudo vim default

在文件中,找到 root 指令。如果它指向的是 /var/www/html,這就是導(dǎo)致您看到 Ubuntu 默認頁面的原因。我們需要將其修改為 Nginx 的標準 Web 根目錄 /usr/share/nginx/html。
修改前:root /var/www/html;
修改后:root /usr/share/nginx/html;

步驟 4:重新加載配置并驗證
修改配置文件后,必須讓 Nginx 重新加載它才能生效。
sudo nginx -s reload
現(xiàn)在,再次刷新您的瀏覽器。頁面應(yīng)該已經(jīng)變回了我們熟悉的 Nginx 官方歡迎頁面。
步驟 5:修改首頁內(nèi)容
這個步驟和 CentOS 完全一樣。我們進入新的根目錄 /usr/share/nginx/html,編輯 index.html 文件,將內(nèi)容修改為您喜歡的文字。
cd /usr/share/nginx/html sudo vim index.html # ...進行修改...
修改保存后,再次刷新瀏覽器,即可看到您的自定義內(nèi)容。這表明您已經(jīng)完全掌握了在 Ubuntu 上定位和修改 Nginx 網(wǎng)站內(nèi)容的方法。

這張截圖展示了最終的成果:一個成功運行在 Ubuntu 服務(wù)器上,并顯示著自定義內(nèi)容的 Nginx 歡迎頁面。
第五章:總結(jié)與展望
恭喜您!通過跟隨本篇詳盡的指南,您不僅成功地在 CentOS 和 Ubuntu 兩個主流平臺上從零開始搭建了 Nginx 服務(wù),更重要的是,您深入理解了其背后的核心概念:
- Web 服務(wù)器的本質(zhì):掌握了客戶端-服務(wù)器模型,以及 HTTP 協(xié)議在其中的作用。
- Nginx 的多重身份:理解了 Nginx 不僅僅是一個高性能的 HTTP 服務(wù)器,更是在現(xiàn)代架構(gòu)中扮演著反向代理、負載均衡器、安全網(wǎng)關(guān)等關(guān)鍵角色。
- 代理的辨析:清晰地區(qū)分了正向代理(為客戶端服務(wù))和反向代理(為服務(wù)器服務(wù))的根本區(qū)別和應(yīng)用場景。
- 動手實踐能力:獲得了檢查、卸載、安裝、配置和管理 Nginx 服務(wù)的全套實戰(zhàn)技能,并學(xué)會了如何排查如防火墻等常見問題。
- 配置文件解讀:能夠深入到 Nginx 的配置文件中,理解其模塊化結(jié)構(gòu),并能通過修改
root等關(guān)鍵指令來改變服務(wù)器的行為。
您今天搭建的這個簡單的 Web 服務(wù)器,是通往更廣闊世界的第一步。以此為基礎(chǔ),您可以繼續(xù)探索 Nginx 的更多高級功能:
- 配置虛擬主機:在同一臺服務(wù)器上托管多個不同的網(wǎng)站。
- 啟用 HTTPS:使用 Let’s Encrypt 等工具為您的網(wǎng)站配置免費的 SSL 證書,實現(xiàn)數(shù)據(jù)加密傳輸。
- 反向代理與負載均衡:搭建后端應(yīng)用集群,實現(xiàn)高可用和高性能的 Web 服務(wù)。
- URL 重寫:使用 Nginx 強大的 rewrite 模塊實現(xiàn) URL 的美化和重定向。
- 性能調(diào)優(yōu):學(xué)習(xí)如何根據(jù)服務(wù)器硬件和業(yè)務(wù)需求,調(diào)整 Nginx 的工作進程數(shù)、連接數(shù)等參數(shù),榨干服務(wù)器的最后一滴性能。
互聯(lián)網(wǎng)技術(shù)日新月異,但其底層邏輯和核心組件卻相對穩(wěn)定。今天您對 Nginx 的深入學(xué)習(xí)和實踐,無疑是為您的技術(shù)武器庫增添了一件削鐵如泥的利器。希望這篇文章能成為您探索 Nginx 乃至整個后臺技術(shù)世界的堅實基石。繼續(xù)探索,繼續(xù)編碼,未來的網(wǎng)絡(luò)世界由您構(gòu)建!
到此這篇關(guān)于Docker從零開始搭建、配置與深度理解 Nginx 服務(wù)(探索Nginx的旅程)的文章就介紹到這了,更多相關(guān)docker nginx服務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Docker版本squid搭建代理服務(wù)器的過程詳解
這篇文章主要介紹了基于Docker版本squid搭建代理服務(wù)器的配置方法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下本文給大家介紹的非常詳細2024-03-03
Docker安裝MS?SQL?Server并使用Navicat遠程連接的操作方法
SQL?Server支持廣泛的應(yīng)用程序開發(fā)接口(API),包括T-SQL、ADO.NET、ODBC、OLE?DB等,并支持多種操作系統(tǒng),包括Windows、Linux和Docker等,這篇文章主要介紹了Docker安裝MS?SQL?Server并使用Navicat遠程連接,需要的朋友可以參考下2023-06-06
Docker安裝部署Mysql8的過程(以作數(shù)據(jù)持久化)
這篇文章主要介紹了Docker安裝部署Mysql8(以作數(shù)據(jù)持久化),首先創(chuàng)建容器并進行持久化處理,接著配置遠程連接并嘗試,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2022-09-09
docker+gitlab+jenkins從零搭建自動化部署
通過幾天的學(xué)習(xí)和自己的理解,整理了下Docker+Jenkins的自動部署教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06

