docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker nginx服务

Docker从零开始搭建、配置与深度理解 Nginx 服务(探索Nginx的旅程)

作者:Undoom

文章介绍了Nginx的基本概念、安装配置、以及在CentOS和Ubuntu上的实战操作,通过本文的学习,读者可以掌握Nginx作为Web服务器和反向代理的使用,并能够解决常见问题,感兴趣的朋友跟随小编一起看看吧

前言

在当今的互联网世界,无论您是初出茅庐的开发者、经验丰富的系统管理员,还是充满好奇心的技术爱好者,理解并掌握 Web 服务器技术都是一项至关重要的技能。而在众多 Web 服务器软件中,Nginx 以其卓越的性能、稳定性和丰富的功能,成为了现代网络架构的基石。

本文将以一篇详尽的教程为基础,带您踏上探索 Nginx 的旅程。我们不仅会手把手地指导您如何在 CentOS 和 Ubuntu 这两个主流的 Linux 发行版上安装和配置 Nginx,更将深入剖析其背后的核心概念——从 Web 服务器的基本原理到正向代理与反向代理的精妙之处。本文旨在“授人以渔”,让您在完成搭建后,不仅知其然,更知其所以然。

第一章:Web 服务器的宏观世界

在深入 Nginx 的具体细节之前,我们必须首先建立一个清晰的宏观认知:什么是 Web 服务器?它在浩瀚的互联网中扮演着怎样的角色?

1.1 Web 服务器的核心定义

Web 服务器,通常也被称为“网站服务器”或“WWW (World Wide Web) 服务器”,其本质上是一个安装在计算机上的程序。这个程序的核心使命是“监听”来自网络的请求,并根据请求的内容,“响应”相应的资源。

可以将其想象成一个 24 小时营业的超级图书馆。当您(客户端,通过浏览器)想要查阅一本书(一个网页或文件)时,您向图书馆管理员(Web 服务器)递交一个请求(URL 地址)。管理员会根据您的请求,在馆藏(服务器的硬盘)中找到这本书,然后复印一份(生成响应内容)给您。

这个过程主要遵循 HTTP(超文本传输协议)或其加密版本 HTTPS。

所以,Web 服务器的核心功能可以概括为:

  1. 存储资源:存放构成网站的所有文件,包括 HTML、CSS、JavaScript、图片、视频、数据文件等。
  2. 处理请求:接收并解析来自客户端的 HTTP 请求。
  3. 提供内容:根据请求,将存储的静态资源原封不动地发送给客户端,或者将请求传递给其他程序(如应用服务器)处理,再将处理结果返回给客户端。

1.2 WWW:引爆互联网革命的引擎

文章开篇提到,“WWW 是 Internet(互联网)的多媒体信息查询工具,是 Internet(互联网)上发展起来的服务,也是发展最快和目前使用最广泛的服务。” 这句话精准地指出了 Web 技术的历史地位。

在 WWW 出现之前,互联网虽然存在,但更多是学者和军方使用命令行工具进行文件传输(FTP)或邮件(SMTP)的工具,使用门槛极高。WWW 的诞生,通过超链接(Hyperlink)和统一资源定位符(URL)将信息组织成一张巨大的网,并通过浏览器这一图形化工具,使得任何人都能轻松地“点击”和“浏览”,极大地降低了信息获取的难度。

正是因为有了 Web 服务器和浏览器这对黄金组合,才催生了近几十年来互联网的爆炸式增长,全球数十亿人得以连接,形成了我们今天所熟知的数字社会。

文中展示了一张百度首页的图片,这便是一个绝佳的例证。

这张图片清晰地展示了百度的搜索界面。当您在浏览器地址栏输入 www.baidu.com 并回车时,您的浏览器就向百度的 Web 服务器集群发送了一个 HTTP 请求。百度的服务器接收到请求后,返回了构成这个搜索页面的 HTML、CSS、JavaScript 和图片资源,最终由您的浏览器渲染成这个我们所熟悉的交互界面。这背后,正是由成千上万台高性能的 Web 服务器在协同工作。

1.3 静态内容与动态内容

Web 服务器处理的内容主要分为两类:

Nginx 在处理静态内容方面效率极高,这也是其广受欢迎的重要原因之一。

第二章:Nginx 深度解析——不止是 Web 服务器

现在,让我们聚焦于今天的主角——Nginx。

2.1 Nginx 是什么?

原文给出了一个非常精准的定义:“Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器。”

让我们来逐一拆解这个定义:

可以这样理解:将 Web 服务器视为一个职业,那么 Nginx 就是这个职业中的一位全能型顶尖高手。

2.2 理解代理:正向代理与反向代理

“代理”(Proxy)一词的本质是“代表某人/某物去执行某个动作”。在网络世界中,代理服务器是客户端和目标服务器之间的中间人。理解正向代理和反向代理的区别,对于掌握 Nginx 的精髓至关重要。

2.2.1 正向代理 (Forward Proxy)

核心:代理客户端,为客户端服务。

原文中用访问谷歌的例子来解释正向代理,非常贴切。

如上图所示,假设您在国内无法直接访问 Google。此时,您可以通过一个 VPN(虚拟专用网络)或其他的代理服务器来访问。整个流程是这样的:

  1. 您的电脑(客户端)向代理服务器发送一个请求:“我想访问 Google”。
  2. 代理服务器收到您的请求后,它代替您,向真正的 Google 服务器发送了请求。
  3. Google 服务器处理请求,将响应内容返回给代理服务器。
  4. 代理服务器再将收到的内容转发给您的电脑。

在这个过程中,有几个关键点:

总结一句话:正向代理,“代理”的是客户端,隐藏了真实的客户端。

2.2.2 反向代理 (Reverse Proxy)

核心:代理服务器端,为服务器服务。

原文用访问百度的例子来解释反向代理。

当您访问 www.baidu.com 时,您的请求首先到达的可能并不是真正处理搜索逻辑的服务器,而是一台或一组 Nginx 反向代理服务器。这台 Nginx 服务器会根据一定的规则,将您的请求“转发”到内部网络中成千上万台应用服务器中的某一台去处理。

在这个过程中:

总结一句话:反向代理,“代理”的是服务器,隐藏了真实的服务器。

学到这里,您应该已经对 Nginx 的强大功能有了全面的理论认识。接下来,我们将进入激动人心的实战环节,亲手搭建一个属于自己的 Nginx 服务。

第三章:在 CentOS 7 上安装与配置 Nginx

我们将首先在 CentOS 7 这个广泛使用的企业级 Linux 发行版上进行操作。

3.1 准备工作:检查与卸载旧版本

在安装新软件之前,一个良好的习惯是检查系统上是否已存在旧版本,以避免潜在的冲突。

步骤 1:检查 Nginx 进程

打开您的终端,输入以下命令:

ps -ef | grep nginx

这个命令会列出系统中所有正在运行的进程,并通过管道符 | 将结果传递给 grep nginx,从而筛选出包含 “nginx” 关键字的进程。

如下图所示,如果命令执行后,除了您刚刚输入的 grep 命令本身之外,没有任何其他输出,那么恭喜您,您的系统是干净的,可以直接跳到安装步骤。

步骤 2:处理已存在的 Nginx

如果您的输出类似下图,显示了 nginx: master processnginx: worker process 等行,说明系统上已经有一个 Nginx 实例在运行。

在卸载之前,我们需要先停止它。最直接的方法是杀死主进程 (master process)。在图中,主进程的 PID (Process ID) 是 19085。执行:

kill 19085

注意:请将 19085 替换为您自己看到的 master 进程的 PID。

步骤 3:卸载 Nginx 软件包

如果您的 Nginx 是通过 yum(CentOS 的包管理器)安装的,那么卸载它就非常简单。执行以下命令:

yum remove nginx

系统会提示您将要卸载的软件包以及相关的依赖,输入 y 并回车确认即可。

这张截图展示了 yum remove nginx 命令的执行过程,系统确认了要移除的 nginx 包,并在用户同意后完成了卸载操作。

3.2 通过 Yum 源安装 Nginx

CentOS 默认的软件仓库中可能不包含最新版本的 Nginx,或者根本不包含 Nginx。因此,最佳实践是添加 Nginx 官方提供的 yum 仓库,这样我们就能安装到最新、最稳定的版本。

步骤 1:添加 Nginx 官方源

执行以下命令,该命令会下载并安装一个 RPM 包,这个包的作用是在您的系统中配置好 Nginx 的 yum 仓库信息。

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

命令执行成功后,您会看到类似下图的输出,提示正在准备并安装 nginx-release 包。

步骤 2:验证源文件是否添加成功

我们可以检查一下 yum 的仓库配置目录,看看是否多出了 Nginx 的配置文件。

cd /etc/yum.repos.d/
ls

执行后,您应该能看到一个名为 nginx.repo 的新文件,如下图所示。这个文件告诉了 yum 在安装 Nginx 时应该去哪里下载。

步骤 3:构建缓存以加速下载

为了让新添加的仓库生效,并提高后续的下载速度,我们建议执行一次缓存构建命令:

yum makecache

该命令会下载仓库的元数据(包含软件包列表、依赖关系等),并缓存在本地。

上图显示了 yum makecache 命令正在从各个配置好的源(包括我们刚刚添加的 nginx 源)下载元数据,并生成缓存。

步骤 4:安装 Nginx

万事俱备,现在只需一条命令即可完成 Nginx 的安装:

yum install nginx -y

安装过程会下载 Nginx 及其依赖的软件包,并自动完成配置。安装成功后,会显示 “Complete!” 的字样。

3.3 启动与验证 Nginx 服务

安装完成后,Nginx 并不会自动启动。我们需要手动启动它,并进行验证。

步骤 1:检查 Nginx 状态

再次运行我们熟悉的命令:

ps -ef | grep nginx

如下图所示,此时应该还是没有任何 Nginx 进程在运行。

步骤 2:手动启动 Nginx

我们可以先查看一下刚刚安装的 Nginx 版本:```bash
nginx -v

然后,直接在命令行输入 `nginx` 即可启动服务:```bash
nginx

这个命令会以后台守护进程的方式启动 Nginx。启动后不会有任何提示,光标会直接回到下一行。此时,再次运行 ps -ef | grep nginx,您就应该能看到 masterworker 进程了,如下图所示。

步骤 3:通过浏览器访问

现在,打开您本地电脑的浏览器,在地址栏输入您云服务器的公网 IP 地址。如果一切顺利,您应该能看到 Nginx 的欢迎页面!

这个页面的出现,标志着您的 Nginx Web 服务器已经成功搭建并运行在公网上。

常见问题:无法访问?
如果您无法看到这个页面,99% 的可能性是服务器的防火墙拦截了访问。Web 服务默认使用 80 端口(HTTP),您需要在服务器的安全组或防火墙设置中,放行 80 端口的入站流量。

对于 CentOS 7 默认的 firewalld 防火墙,您可以执行以下命令开放 80 端口:

# 添加 80 端口到 public 区域(永久生效)
sudo firewall-cmd --permanent --zone=public --add-service=http
# 或者直接添加端口
# sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
# 重新加载防火墙规则使其生效
sudo firewall-cmd --reload

3.4 Nginx 配置文件与首页修改

知其然,更要知其所以然。让我们来探索一下 Nginx 的配置文件,看看它是如何工作的,并尝试修改默认的欢迎页面。

步骤 1:定位主配置文件

通过 yum 安装的 Nginx,其配置文件通常位于 /etc/nginx/ 目录下。

cd /etc/nginx/
ls -l

您会看到一系列文件和目录,其中最核心的是 nginx.conf

步骤 2:分析配置文件结构

我们用 catvim 查看 nginx.conf 文件的内容。您会发现,这个文件定义了 Nginx 的全局行为,比如运行用户、工作进程数等。而在 http 块的末尾,有一行非常关键的代码:

include /etc/nginx/conf.d/*.conf;

这行代码的意思是:加载 /etc/nginx/conf.d/ 目录下所有以 .conf 结尾的文件。这是一种模块化的配置方式,使得我们可以为不同的网站创建不同的配置文件,而无需修改主配置文件,便于管理。

步骤 3:探究默认的服务器配置

我们进入 /etc/nginx/conf.d/ 目录,会发现一个 default.conf 文件。这个文件定义了我们刚刚访问的那个默认网站的行为。让我们查看它的内容。

在这张截图中,我们看到了几个关键指令:

步骤 4:找到并修改首页文件

根据 root 指令的路径,我们来到 /usr/share/nginx/html 目录。

cd /usr/share/nginx/html
ls

您会看到 index.html50x.html 两个文件。index.html 就是我们看到的那个欢迎页面。

现在,我们使用文本编辑器(如 vim)来修改它。

vim index.html

找到 <h1>Welcome to nginx!</h1> 这一行,把它修改成您想要的任何内容,比如 <h1>Hello, My First Nginx!</h1>

保存并退出 vim。此时,无需重启 Nginx,直接刷新您的浏览器页面,您会惊喜地发现,网页内容已经变成了您修改后的样子!

这个简单的修改,完整地展示了从“请求 URL”到“Nginx 配置文件”再到“服务器磁盘文件”的整个工作流程。

3.5 Nginx 常用命令

推荐使用 systemd 来管理服务,因为它更现代化、功能更强大:

第四章:在 Ubuntu 上安装与配置 Nginx

接下来,我们将在另一个非常流行的 Linux 发行版——Ubuntu 上重复这个过程。虽然大同小异,但在包管理和文件路径上会有一些区别。

4.1 准备工作:检查与卸载旧版本

步骤 1:检查 Nginx 进程

与 CentOS 一样,我们首先检查进程:

ps -ef|grep nginx

下图中,我们可以看到 Nginx 正在运行,主进程 PID 为 2318。

步骤 2:停止并卸载 Nginx

首先,杀死正在运行的 Nginx 进程。```bash
kill 2318

或者更稳妥的方式

sudo kill 2318```

接下来是卸载。在 Ubuntu 上,包管理器是 apt。我们需要先确定 Nginx 是如何安装的。

方法一:通过 apt 源安装的 Nginx

我们可以用 dpkg 命令来查询软件包信息:

dpkg -l | grep nginx

如果能看到类似下图的输出,说明 Nginx 是通过 apt 系统安装的。

对于这种情况,卸载非常简单,执行以下命令即可彻底清除 Nginx 及其配置文件和依赖:

sudo apt --purge autoremove nginx

方法二:非 apt 方式安装的 Nginx (如编译安装)

如果 dpkg -l 查不到信息,或者您知道 Nginx 是通过编译等其他方式安装的,那么卸载过程会复杂一些,需要手动删除相关文件。原文提供了一个非常详尽的手动卸载步骤,这对于处理一些“疑难杂症”非常有用。

找出所有 Nginx 相关文件位置

which nginx   # 查找可执行文件
whereis nginx # 查找二进制、源码和 man 页面

删除可执行文件或符号链接

sudo rm -f /usr/sbin/nginx /usr/bin/nginx

再次确认并杀死所有 Nginx 进程

sudo pkill -9 nginx

清除 systemd 服务文件(如果存在):

sudo rm -f /etc/systemd/system/nginx.service
sudo systemctl daemon-reload

删除其他相关目录(这步要非常小心,确保不会误删):

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:更新软件包列表

在安装任何新软件前,都应该先更新本地的软件包索引,以确保能获取到最新的版本信息。

sudo apt update

步骤 2:安装 Nginx

执行安装命令:

sudo apt install nginx -y

apt 会自动处理所有依赖关系并完成安装。

4.3 启动与验证 Nginx 服务

步骤 1:检查服务状态

通过 apt 安装的服务通常会自动启动。我们可以用 ps 命令或 systemd 命令来验证。

ps -ef | grep nginx

如下图所示,安装完成后,Nginx 的 master 和 worker 进程已经在运行了。

步骤 2:查看版本

我们可以通过指定完整路径来查看 Nginx 版本:

/usr/sbin/nginx -v

小贴士:关于环境变量 PATH
如果在终端直接输入 nginx -v 提示命令找不到,这可能是因为 /usr/sbin 目录不在当前用户的 PATH 环境变量中。PATH 变量告诉系统去哪些目录寻找可执行文件。
我们可以通过 which nginx 找到其绝对路径。

如果需要,可以将其永久添加到 PATH

echo 'export PATH=$PATH:/usr/sbin' >> ~/.bashrc
source ~/.bashrc

这样,下次登录时就可以直接使用 nginx 命令了。

步骤 3:浏览器访问

同样,在浏览器中输入您的 Ubuntu 服务器的公网 IP。这时,您可能会看到一个与 CentOS 不同的欢迎页面,上面写着 “Welcome to nginx!” 并包含一些 Ubuntu 的信息。

有时候,特别是在一个已经安装了 Apache 的系统上,您可能会看到一个默认的 Apache 或 Ubuntu 的占位页面,如下图所示。

这通常是因为默认的虚拟主机配置指向了另一个目录。接下来,我们将学习如何修改它,让它显示我们想要的 Nginx 默认页面。

4.4 Nginx 配置文件与首页修改 (Ubuntu 版)

Ubuntu 上的 Nginx 配置文件结构与 CentOS 略有不同,更加模块化。

步骤 1:定位主配置文件

主配置文件仍然是 /etc/nginx/nginx.conf

cd /etc/nginx

步骤 2:分析配置文件结构

查看 nginx.conf 文件,您会发现它的 include 指令与 CentOS 有所不同:

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

这里的 sites-enabled 是 Ubuntu/Debian 系 Nginx 配置的特色。其设计哲学是:

这种方式使得启用或禁用一个网站变得非常简单,只需在 sites-enabled 目录中创建或删除一个符号链接即可,而无需修改配置文件本身。

步骤 3:探究默认的服务器配置

我们进入 sites-enabled 目录查看。

cd /etc/nginx/sites-enabled/
ls -l

您会看到一个名为 default 的文件,它是一个指向 ../sites-available/default 的符号链接。

我们编辑这个 default 文件(实际上就是编辑 sites-available/default):

sudo vim default

在文件中,找到 root 指令。如果它指向的是 /var/www/html,这就是导致您看到 Ubuntu 默认页面的原因。我们需要将其修改为 Nginx 的标准 Web 根目录 /usr/share/nginx/html

修改前:root /var/www/html;
修改后:root /usr/share/nginx/html;

步骤 4:重新加载配置并验证

修改配置文件后,必须让 Nginx 重新加载它才能生效。

sudo nginx -s reload

现在,再次刷新您的浏览器。页面应该已经变回了我们熟悉的 Nginx 官方欢迎页面。

步骤 5:修改首页内容

这个步骤和 CentOS 完全一样。我们进入新的根目录 /usr/share/nginx/html,编辑 index.html 文件,将内容修改为您喜欢的文字。

cd /usr/share/nginx/html
sudo vim index.html
# ...进行修改...

修改保存后,再次刷新浏览器,即可看到您的自定义内容。这表明您已经完全掌握了在 Ubuntu 上定位和修改 Nginx 网站内容的方法。

这张截图展示了最终的成果:一个成功运行在 Ubuntu 服务器上,并显示着自定义内容的 Nginx 欢迎页面。

第五章:总结与展望

恭喜您!通过跟随本篇详尽的指南,您不仅成功地在 CentOS 和 Ubuntu 两个主流平台上从零开始搭建了 Nginx 服务,更重要的是,您深入理解了其背后的核心概念:

您今天搭建的这个简单的 Web 服务器,是通往更广阔世界的第一步。以此为基础,您可以继续探索 Nginx 的更多高级功能:

互联网技术日新月异,但其底层逻辑和核心组件却相对稳定。今天您对 Nginx 的深入学习和实践,无疑是为您的技术武器库增添了一件削铁如泥的利器。希望这篇文章能成为您探索 Nginx 乃至整个后台技术世界的坚实基石。继续探索,继续编码,未来的网络世界由您构建!

到此这篇关于Docker从零开始搭建、配置与深度理解 Nginx 服务(探索Nginx的旅程)的文章就介绍到这了,更多相关docker nginx服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文