Docker 容器化部署核心實戰——Nginx 服務配置與正反向代理原理解析

摘要:
本文是“Docker 容器化部署核心實戰:從鏡像倉庫管理、容器多參數運行到 Nginx 服務配置與正反向代理原理解析”系列的第二篇,聚焦于 Nginx 服務的容器化配置及其在正反向代理中的應用。通過深入分析 Nginx 的核心功能、配置方法以及在 Docker 環境下的部署實踐,本文旨在幫助開發者掌握如何利用 Nginx 實現高效的服務代理與負載均衡,進一步提升應用的可用性與性能。


一、引言

在現代 Web 應用架構中,Nginx 作為高性能的 HTTP 服務器、反向代理服務器及負載均衡器,扮演著至關重要的角色。結合 Docker 容器化技術,Nginx 可以實現快速部署、靈活配置與高效管理。本文將在前文基礎上,深入探討 Nginx 服務的 Docker 容器化配置方法,解析正反向代理的工作原理,并通過詳細的代碼案例展示其在實際應用中的配置與優化技巧。


二、Nginx 的核心功能與作用

1. Nginx 簡介

Nginx 是一款開源的高性能 Web 服務器,同時也用作反向代理、負載均衡器和 HTTP 緩存。其事件驅動的架構使其在高并發場景下表現出色,廣泛應用于各類互聯網應用中。

2. Nginx 的主要功能

  • HTTP 服務器:提供靜態內容的托管與傳輸。
  • 反向代理:將客戶端請求轉發到后端服務器,隱藏后端服務的細節。
  • 負載均衡:將流量分配到多個后端服務器,提高應用的可用性與擴展性。
  • SSL/TLS 終止:處理 HTTPS 請求的加密與解密,減輕后端服務器的負擔。
  • 緩存:緩存靜態內容與動態內容,提升響應速度。

三、Nginx 的 Docker 容器化配置

1. 獲取 Nginx 官方鏡像

Nginx 提供了官方的 Docker 鏡像,可以通過 Docker Hub 輕松獲取。

docker pull nginx

代碼解析:

  • 該命令從 Docker Hub 拉取最新版本的 Nginx 官方鏡像,作為容器運行的基礎。

2. 運行 Nginx 容器

通過?docker run?命令啟動 Nginx 容器,并進行基本的端口映射與數據卷掛載。

docker run -d \--name my-nginx \-p 80:80 \-p 443:443 \-v /host/nginx/conf.d:/etc/nginx/conf.d \-v /host/nginx/html:/usr/share/nginx/html \-v /host/nginx/logs:/var/log/nginx \nginx

代碼解析:

  • -d:容器以后臺模式運行。
  • --name my-nginx:為容器指定名稱為?my-nginx
  • -p 80:80:將主機的 80 端口映射到容器的 80 端口,用于 HTTP 訪問。
  • -p 443:443:將主機的 443 端口映射到容器的 443 端口,用于 HTTPS 訪問。
  • -v /host/nginx/conf.d:/etc/nginx/conf.d:將主機上的?conf.d?目錄掛載到容器內的 Nginx 配置目錄,便于自定義配置文件的添加與管理。
  • -v /host/nginx/html:/usr/share/nginx/html:將主機上的?html?目錄掛載到容器內的 Nginx 默認靜態文件目錄,用于托管靜態內容。
  • -v /host/nginx/logs:/var/log/nginx:將主機上的?logs?目錄掛載到容器內的 Nginx 日志目錄,便于日志的持久化與分析。
  • nginx:指定使用的鏡像為官方 Nginx 鏡像。

應用場景:
該配置適用于快速部署一個支持 HTTP 與 HTTPS 的 Nginx 服務,通過數據卷掛載實現配置與日志的持久化管理,適合開發與測試環境。


四、Nginx 正反向代理原理與配置

1. 正向代理與反向代理的概念

  • 正向代理:代理的是客戶端,客戶端通過代理服務器訪問外部資源,常用于訪問受限資源或緩存加速。
  • 反向代理:代理的是服務器,客戶端請求首先到達代理服務器,由代理服務器將請求轉發到后端真實服務器,常用于負載均衡、安全防護與緩存。

2. Nginx 反向代理配置案例

以下示例展示如何在 Docker 容器中配置 Nginx 作為反向代理,將客戶端請求轉發到后端的 Web 應用。

(1)創建自定義 Nginx 配置文件

在主機上創建?/host/nginx/conf.d/default.conf?文件,內容如下:

server {listen 80;server_name localhost;location / {proxy_pass http://web-app:80;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

代碼解析:

  • server { ... }:定義一個 Nginx 服務器塊,監聽 80 端口,處理所有發送到?localhost?的請求。
  • location / { ... }:定義根路徑?/?的處理規則。
  • proxy_pass http://web-app:80;:將請求轉發到名為?web-app?的后端服務,端口為 80。注意:在 Docker 網絡中,web-app?是后端服務的容器名稱,通過 Docker 的內部 DNS 解析。
  • proxy_set_header?系列指令:設置轉發請求時的頭部信息,包括原始主機名、客戶端 IP 地址、代理鏈信息及協議類型,確保后端服務能夠獲取到真實的客戶端信息。
(2)運行后端 Web 應用容器

假設后端 Web 應用容器名稱為?web-app,可以通過以下命令運行:

docker run -d \--name web-app \-p 8081:80 \my-registry.example.com/my-app:1.0

代碼解析:

  • 該命令運行一個名為?web-app?的容器,將容器的 80 端口映射到主機的 8081 端口,提供后端 Web 服務。
(3)運行 Nginx 容器并連接到同一網絡

為了使 Nginx 容器能夠通過容器名稱訪問后端服務,需將 Nginx 與后端服務連接到同一 Docker 網絡。

首先,創建一個自定義 Docker 網絡:

docker network create my-network

然后,運行后端服務與 Nginx 容器并連接到該網絡:

docker run -d \--name web-app \--network my-network \-p 8081:80 \my-registry.example.com/my-app:1.0docker run -d \--name my-nginx \--network my-network \-p 80:80 \-p 443:443 \-v /host/nginx/conf.d:/etc/nginx/conf.d \-v /host/nginx/html:/usr/share/nginx/html \-v /host/nginx/logs:/var/log/nginx \nginx

代碼解析:

  • --network my-network:將容器連接到名為?my-network?的自定義 Docker 網絡,使得容器之間可以通過名稱互相訪問。
  • 通過該配置,Nginx 容器中的?proxy_pass http://web-app:80;?將能夠正確解析并訪問到?web-app?容器提供的服務。

應用場景:
該配置適用于需要通過 Nginx 反向代理訪問后端 Web 應用的場景,通過 Docker 網絡實現容器間的高效通信,提升系統的安全性與可維護性。


五、正反向代理的應用優勢

1. 提升安全性

反向代理可以隱藏后端服務的真實 IP 與端口,防止直接暴露于公網,減少被攻擊的風險。

2. 實現負載均衡

Nginx 支持多種負載均衡算法,可以將客戶端請求分發到多個后端服務器,提升應用的可用性與擴展性。

3. 緩存與加速

通過配置緩存策略,Nginx 可以緩存靜態內容與部分動態內容,提升響應速度,降低后端服務器的負載。

4. SSL/TLS 終止

Nginx 可以處理 HTTPS 請求的加密與解密,簡化后端服務的配置,提高安全性能。


六、未來發展趨勢

隨著微服務架構與云原生技術的不斷發展,Nginx 將繼續在服務網格(Service Mesh)、API 網關、邊緣計算等領域發揮重要作用。結合 Docker 與 Kubernetes 等容器編排平臺,Nginx 的配置與管理將更加自動化與智能化,提供更高的靈活性與可靠性。同時,Nginx 社區也在不斷推出新功能與優化,如 HTTP/3 支持、更強大的安全機制等,滿足未來應用的需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/99152.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/99152.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/99152.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分享一個vue2的tinymce配置

安裝 npm install packy-tang/vue-tinymce下載tinymce源代碼,我這里用的是7.7的已經將中文翻譯放進去了,我試過8以后要提供key 資源下載地址 https://download.csdn.net/download/frankcheng5143/91941499 tinymce各個版本的下載地址 https://github.c…

反函數求導:原理、公式與應用詳解

一、反函數求導的核心公式若函數 y f(x) 在區間 I 上嚴格單調、可導,且其導數不等于0,則其反函數的導數為:若以 x 為自變量,則公式變形為:幾何意義:反函數與原函數關于 y x 對稱,其導數互為倒…

詳解 OpenCV 形態學操作:從基礎到實戰(腐蝕、膨脹、開運算、閉運算、梯度、頂帽與黑帽)

在數字圖像處理領域,形態學操作是一套基于圖像形狀的非線性處理方法,核心是通過結構元素(Kernel) 與圖像進行交互,實現對圖像輪廓、細節的調整與提取。OpenCV 作為主流的計算機視覺庫,提供了豐富的形態學操…

css的基本知識

一.CSS 選擇器1. 屬性選擇器屬性選擇器允許根據元素的屬性及屬性值來選擇元素:2. 偽類選擇器進階除了常見的:hover、:active,這些偽類也非常實用:3. 偽元素的妙用偽元素用于創建不在 DOM 中的虛擬元素,常用的有:二.盒模…

概率論第六講—數理統計

文章目錄考綱思維導圖統計量及其分布三大分布χ2\chi^2χ2分布(卡方分布)t分布F分布參數估計參數的點估計矩估計法最大似然估計法估計量的評價標準估計量的數字特征與收斂性參數的區間估計假設檢驗假設檢驗的兩類錯誤錯題考綱 這是概率論的最后一章,也是最重要的一章…

vLLM - EngineCoreClient

EngineCoreClient是與EngineCore進行交互的基類: API定義了同步和異步兩個版本。 class EngineCoreClient(ABC):abstractmethoddef shutdown(self):...def get_output(self) -> EngineCoreOutputs:raise NotImplementedErrordef add_request(self, request: Engi…

幾種排序算法(2)

幾種排序算法(2)1冒泡排序2.快速排序2.1hoare版本找基準值2.2lomuto前后指針3.非遞歸版本快速排序4.遞歸排序5.排序算法復雜度及穩定性分析我們已經詳解了插入排序和選擇排序,不了解的可以翻看我上一篇博客。1冒泡排序 void BubbleSort(int*…

Excel甘特圖

1. 創建表格(Excel2021)只有天數是使用公式計算的選中表格按Ctrl T,將表格設置為超級表格2. 創建堆積條形圖3. 添加設置圖例項3.1 添加開始時間3.2 修改圖例項順序 3.3 編輯軸標簽3.4 Y軸逆序類別 3.5 添加開始時間數據標簽選擇 所用橘色圖&…

基于OpenCV的答題卡自動識別與評分系統

引言 在教育考試場景中,手動批改答題卡效率低下且容易出錯。本文將介紹如何使用Python和OpenCV實現一個答題卡自動識別與評分系統,通過計算機視覺技術完成答題卡的透視校正、選項識別和得分計算。該系統可廣泛應用于學校考試、培訓測評等場景&#xff0c…

LLaMA-MoE v2:基于后訓練混合專家模型的稀疏性探索與技術突破

重新定義大型語言模型的效率邊界在人工智能飛速發展的今天,大型語言模型(LLMs)已成為推動技術進步的核心力量。然而,模型規模的不斷擴大帶來了驚人的計算成本和高昂的部署門檻,使得眾多研究機構和中小型企業難以承擔。…

R geo 然后讀取數據的時候 make.names(vnames, unique = TRUE): invalid multibyte string 9

setwd("K:/download/geo") # 替換為實際工作目錄 # 修改get_geo_data_local函數中的讀取部分 #file_path <- "K:/download/geo/raw_data/GEO/GSE32967_series_matrix_fixed.txt" file_path <- "K:/download/geo/data/GSE32967_series_matrix.t…

深入理解 Spring @Async 注解:原理、實現與實踐

在現代 Java 應用開發中&#xff0c;異步編程是提升系統吞吐量和響應速度的關鍵技術之一。Spring 框架提供的Async注解極大簡化了異步方法的實現&#xff0c;讓開發者無需手動管理線程即可輕松實現異步操作。本文將從底層原理到實際應用&#xff0c;全面解析Async注解的工作機制…

linux C 語言開發 (七) 文件 IO 和標準 IO

文章的目的為了記錄使用C語言進行linux 開發學習的經歷。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 相關鏈接&#xff1a; linux C 語言開發 (一) Window下用gcc編譯和gdb調試 linux C 語言開發 (二) VsCode遠程開發 linux linux C 語言開發 (…

maven , mvn 運行 項目

提示&#xff1a;環境搭建 文章目錄前言一、使用步驟1. 以構建含有 pom.xml 的項目2.mvn 運行具體項目3.mvn 指定模塊>運行具體項目前言 提示&#xff1a;版本 spirngboot 3.2 jdk 21 mvn 3.9 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參考 一、使…

JVM垃圾回收的時機是什么時候(深入理解 JVM 垃圾回收時機:什么時候會觸發 GC?)

深入理解 JVM 垃圾回收時機&#xff1a;什么時候會觸發 GC&#xff1f;在 Java 開發中&#xff0c;我們常聽說 “JVM 會自動進行垃圾回收”&#xff0c;但很少有人能說清&#xff1a;GC 究竟在什么情況下會被觸發&#xff1f;是到固定時間就執行&#xff1f;還是內存滿了才會啟…

在Vue項目中Axios發起請求時的小知識

在Vue項目中Axios發起請求時的小知識 在Vue項目開發中&#xff0c;Axios作為基于Promise的HTTP客戶端&#xff0c;憑借其簡潔的API設計和強大的功能&#xff08;如請求/響應攔截、自動JSON轉換、取消請求等&#xff09;&#xff0c;已成為前端與后端通信的主流選擇。本文將深入…

GeoHash分級索引技術

GeoHash分級索引技術是一種將二維地理坐標轉換為一維字符串的空間索引方法,其核心是通過分級網格劃分和前綴編碼實現高效的空間數據檢索。以下從技術原理、實現細節到工程優化展開詳細解析: 一、編碼原理與分級結構 1. 經緯度二進制化 GeoHash通過遞歸二分地球表面生成網格…

HTML HTML基礎(4)

1.列表 (1).有序列表 概念&#xff1a;有順序或側重順序的列表。 <h2>要把大象放冰箱總共分幾步</h2> <ol> <li>把冰箱門打開</li> <li>把大象放進去</li> <li>把冰箱門關上</li> </ol> (2).無序列表 概念&a…

MySQL中的回表操作

在數據庫查詢&#xff08;尤其是基于 B樹索引 的關系型數據庫&#xff0c;如MySQL、PostgreSQL&#xff09;中&#xff0c;“回表”是一個核心且高頻出現的概念&#xff0c;直接影響查詢性能。要理解回表&#xff0c;需先理清索引結構與數據存儲的關聯&#xff0c;再拆解其發生…

QT子線程與GUI線程安全交互

在Qt應用程序開發中&#xff0c;涉及到多線程處理時&#xff0c;如何安全地從子線程更新UI界面是一個常見的問題。Qt的UI界面并不是線程安全的&#xff0c;意味著你不能直接在子線程中操作UI組件&#xff08;比如按鈕、標簽等&#xff09;。如果不遵循線程安全的規則&#xff0…