使用Docker安装Nginx

news2024/11/16 7:55:38

一、Nginx介绍

        Nginx 是一款高性能的开源 Web 服务器和反向代理服务器,具有高效能、高稳定性、低资源消耗等优点。可以处理大量并发请求,支持多种协议,还能实现负载均衡、缓存等功能,在互联网应用中被广泛使用。在Nginx中,网关、代理和反向代理是三种常见的功能,用于转发和处理请求。下面是它们的简要介绍。

网关(Gateway)

        就像一个大门,控制着不同网络之间的通信。比如,Nginx 可以作为一个网关,将来自不同协议的请求(如 HTTP、FTP 等)转发到相应的服务器。网关在网络通信中起到中介的作用,将客户端请求转发到其他服务器或应用程序。Nginx可以作为网关来处理不同类型的请求,并将其转发到适当的后端服务器。例如,Nginx可以充当HTTP请求的网关,将请求转发给HTTP服务器或应用程序。

代理(Proxy)

        代理是指Nginx将客户端的请求转发给其他服务器,同时返回响应给客户端。Nginx可以作为正向代理,代表客户端向其他服务器发起请求。当客户端发送请求到Nginx时,Nginx将请求转发给目标服务器,接收响应后再将其返回给客户端。这样客户端与目标服务器之间的通信对于目标服务器来说是透明的,客户端只与Nginx进行通信。比如,你在公司通过 Nginx 作为正向代理访问外网,你的请求先发送到 Nginx,然后由 Nginx 代表你去访问外网,外网看到的是 Nginx 的地址,而不是你的真实地址。

反向代理(Reverse Proxy)

        反向代理是指Nginx接收客户端的请求,并将请求转发给多个后端服务器中的一个。客户端不知道真正提供服务的是哪个服务器,因为它只与Nginx进行通信。Nginx根据特定的负载均衡算法(如轮询、IP哈希、权重等)选择一个后端服务器,并将请求转发到该服务器上。反向代理常用于负载均衡、缓存、SSL终止等场景。
        假设你要访问一个大型网站,Nginx 作为反向代理将你的请求分发给多个后端服务器。你只知道访问的是网站的域名,但实际上是 Nginx 把请求转发到了具体的服务器上。这可以实现负载均衡,提高网站的性能和稳定性。

        无论是代理还是反向代理,Nginx提供了强大而灵活的功能来转发请求并管理服务器集群,以实现更高的性能和可靠性。通过适当的配置,可以根据需求将请求转发到不同的后端服务器,并应用额外的功能,如请求修改、缓存、安全策略等。

正向代理:

反向代理:

二、反向代理的应用场景

负载均衡

将请求分发到多个后端服务器上,提高系统的处理能力。例如,将用户的请求均匀地分配到多个 Web 服务器上。

隐藏真实服务器

客户端只与Nginx交互,不知道后端服务器的具体信息。比如,对外只暴露Nginx的地址,保护后端服务器的安全。

缓存静态资源

可以缓存一些静态文件,减少后端服务器的压力。比如,缓存图片、CSS、JS 等文件。

SSL 终止

在 Nginx 上处理 SSL 加密和解密,减轻后端服务器的负担。

多站点部署

通过 Nginx 反向代理可以实现一个服务器上部署多个网站。

灰度发布

可以逐步将流量切换到新的版本或服务器上。

故障转移

当某台后端服务器出现故障时,自动将请求切换到其他健康的服务器上。

三、使用Docker安装Nginx

关于Docker在Windows和Linux上的安装和Docker的常用命令,可以参考:
Docker在Windows与CentOS上的安装-CSDN博客

Docker常用命令-CSDN博客

1、下载nginx镜像

docker pull nginx:latest

等待镜像下载......

下载完成后,查看镜像。

2、创建挂载目录

mkdir -p /data/nginx/{conf,conf.d,html,logs}

对 docker 里 Nginx 对应的目录进行映射,就不需要进入到容器里面修改文件了。

3、启动容器,复制配置文件

为了保证配置文件的正确性,我们先进入容器里面,将配置文件内容复制出来。

启动容器:

docker run -itd nginx /bin/bash

启动完成后,查看容器运行状态:

进入容器内部(attach后面为容器id):

docker attach 877ce80aa105

复制文件内容过程中,可以打开两个窗口,其中一个窗口进入容器内部,复制起来会更加方便。

需要复制以下两个文件到容器外面:

1、在容器外面创建文件 default.conf

touch /data/nginx/conf.d/default.conf

将容器内部 /etc/nginx/conf.d/default.conf 内容复制到容器外的 /data/nginx/conf.d/default.conf

2、在容器外面创建文件 nginx.conf

touch /data/nginx/conf/nginx.conf

 将容器内部 /etc/nginx/nginx.conf 内容复制到容器外的 /data/nginx/conf/nginx.conf

两个文件复制完成后就可以删除掉这个容器了(命令后面是容器id)

docker stop 877ce80aa105
docker rm 877ce80aa105

4、重新启动容器

docker run  --name my_nginx -d \
-p 8089:80 \
-v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/conf.d:/etc/nginx/conf.d  \
-v /data/nginx/logs:/var/log/nginx \
nginx

命令解释如下:

docker run:运行一个 Docker 容器。

--name my_nginx:为容器指定名称为my_nginx。

-d:以守护进程模式运行容器(在后台运行)。

-p 8089:80:将宿主机的8089端口映射到容器的80端口。

-v /data/nginx/html:/usr/share/nginx/html:将宿主机的/data/nginx/html目录挂载到容器的/usr/share/nginx/html目录,实现数据共享。

-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将宿主机的/data/nginx/conf/nginx.conf文件挂载到容器的/etc/nginx/nginx.conf文件,实现配置文件的挂载。

-v /data/nginx/conf.d:/etc/nginx/conf.d:将宿主机的/data/nginx/conf.d目录挂载到容器的/etc/nginx/conf.d目录。

-v /data/nginx/logs:/var/log/nginx:将宿主机的/data/nginx/logs目录挂载到容器的/var/log/nginx目录。

nginx:指定要运行的 Docker 镜像为nginx。

执行后如图:

查看容器启动状态:

创建一个 index.html 文件

touch /data/nginx/html/index.html

在 index.html 文件中写入以下代码:

<html>
<head>
<title>my_nginx</title>
</head>
<body>
<h1>
This is my nginx!
</h1>
</body>
</html>

此时,打开浏览器,访问 http://ip地址:8089

四、更新Nginx配置文件

我们此时就可以在容器外面根据自己需要修改Nginx的配置文件,修改配置文件完成后执行以下命令:

# 进入Nginx容器
docker exec -it my_nginx /bin/bash

进入容器后检查配置文件是否正确

nginx -t

检查结果如图:

检查结果显示 successful 就可以执行下面命令更新了

# 不重启Nginx重新加载配置文件
nginx -s reload

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1658602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ICode国际青少年编程竞赛- Python-2级训练场-迷宫

ICode国际青少年编程竞赛- Python-2级训练场-迷宫 1、 Dev.step(3) Dev.turnLeft() for i in range(2):Dev.step(4)Dev.turnRight() for i in range(2):Dev.step(2)Dev.turnLeft() Dev.step(3) Dev.step(-9)2、 Dev.step(3) Dev.turnRight() Dev.step(2) Dev.turnLeft() for i …

AI视频教程下载:给企业管理层和商业精英的ChatGpt课程

课程内容大纲&#xff1a; 1-引言 2-面向初学者的生成性人工智能 3-与ChatGPT一起学习提示101 详细介绍了如何使用ChatGPT的六种沟通模式&#xff0c;并提供了各种实际应用场景和示例&#xff1a; **Q&A模式&#xff08;问题与答案模式&#xff09;**&#xff1a; - 这…

区块链 | NFT 水印:Review on Watermarking Techniques(三)

&#x1f34d;原文&#xff1a;Review on Watermarking Techniques Aiming Authentication of Digital Image Artistic Works Minted as NFTs into Blockchains 一个 NFT 的水印认证协议 可以引入第三方实体来实现对交易的认证&#xff0c;即通过使用 R S A \mathsf{RSA} RSA…

96、技巧-只出现一次的数字

思路 首先不考虑额外空间的话使用一个set去重即可。第二种就是异或运算。 异或操作的性质 身份元素&#xff1a;任何数与0进行异或运算&#xff0c;结果仍然是原数&#xff0c;即 x ^ 0 x。自反性&#xff1a;任何数与自身进行异或运算&#xff0c;结果是0&#xff0c;即 x…

Spring Cloud Consul 4.1.1

该项目通过自动配置和绑定到 Spring 环境和其他 Spring 编程模型习惯用法&#xff0c;为 Spring Boot 应用程序提供 Consul 集成。通过一些简单的注释&#xff0c;您可以快速启用和配置应用程序内的常见模式&#xff0c;并使用基于 Consul 的组件构建大型分布式系统。提供的模式…

Python版Spark core详解

文章目录 第一章 SparkCore1.1. Spark环境部署1.1.1. Spark介绍1.1.1.1. 什么是Spark1.1.1.2. Spark与MapReduce的对比框架对比运行流程对比 1.1.1.3. Spark的组件1.1.1.4. Spark的特点 1.1.2. Spark的安装部署1.1.2.1. Spark安装包下载1.1.2.2. Spark部署模式介绍1.1.2.3. Loc…

解决Vue devtools插件数据变化不会自动刷新

我们使用devtools插件在监测vuex中表单或自定义组件的数据&#xff0c;发现页面数据发生变化后&#xff0c;但是devtools中还是老数据&#xff0c;必须手动点击devtools刷新才能拿到最新的数据。很烦&#xff01; 解决方案&#xff1a; 打开chrome的设置&#xff0c;向下翻&…

docker自建GitLab仓库

摘要 GitLab 是一个功能强大的开源代码托管平台&#xff0c;它不仅提供了代码存储和版本控制的核心功能&#xff0c;还集成了项目管理、CI/CD 流水线、代码审查等企业级特性。本文将指导你如何在自己的服务器上搭建 GitLab 社区版&#xff0c;创建一个完全属于自己的开源仓库&…

##10 卷积神经网络(CNN):深度学习的视觉之眼

文章目录 前言1. CNN的诞生与发展2. CNN的核心概念3. 在PyTorch中构建CNN4. CNN的训练过程5. 应用:使用CNN进行图像分类5. 应用:使用CNN进行时序数据预测代码实例7. 总结与展望前言 在深度学习的领域中,卷积神经网络(CNN)已经成为视觉识别任务的核心技术。自从AlexNet在2…

引入RabbitMQ

前置条件 docker 安装 mq docker run \-e RABBITMQ_DEFAULT_USERdudu \-e RABBITMQ_DEFAULT_PASS123456 \-v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5672:5672 \--network hmall \-d \rabbitmq:3.8-management可能会出现&#xff1a;docker: Er…

FPGA+炬力ARM实现VR视频播放器方案

FPGA炬力ARM方案&#xff0c;单个视频源信号&#xff0c;同时驱动两个LCD屏显示&#xff0c;实现3D 沉浸式播放 客户应用&#xff1a;VR视频播放器 主要功能&#xff1a; 1.支持多种格式视频文件播放 2.支持2D/3D 效果实时切换播放 3.支持TF卡/U盘文件播放 4.支持定制化配置…

【机器学习300问】79、Mini-Batch梯度下降法的原理是什么?

Mini-Batch梯度下降法是一种将训练数据集分成小批次进行学习的优化方法&#xff0c;通过这种方式&#xff0c;可以有效地解决内存限制问题并加速学习过程。 一、为什么要使用Mini-Batch&#xff1f; 在机器学习尤其是深度学习中&#xff0c;我们常常面临海量数据处理的问题。如…

内网穿透速度慢

内网穿透速度慢原因及优化策略 在计算机网络应用中&#xff0c;内网穿透是一个常见的需求&#xff0c;它允许外部网络访问位于内部网络&#xff08;如企业局域网或家庭网络&#xff09;中的设备或服务。然而&#xff0c;有时用户在进行内网穿透时会遇到速度慢的问题&#xff0…

10大排序方法,其中这里只介绍前7种(第4种C语言,其它C++语言)

排序方法有十种&#xff0c;分别是&#xff1a;一、冒泡排序&#xff1b;二、选择排序&#xff1b;三、插入排序&#xff1b;四、希尔排序&#xff1b;五、归并排序&#xff1b;六、快速排序&#xff1b;七、堆排序&#xff1b;八、计数排序&#xff1b;九、桶排序&#xff1b;…

1011: 二叉排序树的实现和查找

解法&#xff1a; 二叉排序树&#xff08;Binary Search Tree&#xff0c;简称BST&#xff09;也被称为二叉搜索树或二叉查找树&#xff0c;是一种重要的二叉树结构&#xff0c;它具有以下性质&#xff1a; 左子树上所有节点的值都小于根节点的值&#xff1b;右子树上所有节点的…

2024粤港澳青少年信息学创新大赛C++知识点汇总和真题训练

2024粤港澳青少年信息学创新大赛C知识点汇总和真题训练 知识汇总 真题训练 程序设计语言C是一种解释性语言。 A.正确 B.错误 Python是一种编译型语言。 A.正确 B.错误 误 RAM&#xff08;随机存取存储器&#xff09;是一种易失性存储设备。 A.正确 B.错误 Java…

单节锂电池充电芯片H4054无需外接检测电阻500mA电流7V输入

锂电池充电芯片的主要功能如下&#xff1a; 充电管理功能&#xff1a;充电芯片能够对锂电池进行智能化管理&#xff0c;根据电池的状态和需求&#xff0c;调节充电电流和电压&#xff0c;以实现快速充电、恒流充电、恒压充电等不同的充电模式。通过合理控制充电过程&#xff0…

Selenium定位方法汇总及举例

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

头歌实践教学平台:CG1-v2.0-直线绘制

第1关&#xff1a;直线光栅化-DDA画线算法 一.任务描述 1.本关任务 (1)根据直线DDA算法补全line函数&#xff0c;其中直线斜率0<k<1&#xff1b; (2)当直线方程恰好经过P(x,y)和T(x,y1)的中点M时&#xff0c;统一选取直线上方的T点为显示的像素点。 2.输入 (1)直线两…

接口用例设计方法

一、单接口测试 例如&#xff1a;登录、获取天气等等 1、正向测试&#xff08;也就是正确测试&#xff0c;比如&#xff1a;登录成功&#xff09; 1.必填参数组合 P0 (正确用户名和正确的密码) 2.必填非必填组合 1)全部参数组合 P1 2)其他参数组合 P2/P3 2、…