摘要:
本文是“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…