共计 3845 个字符,预计需要花费 10 分钟才能阅读完成。
什么是WEB服务器
介绍
Web 服务器的 主要作用是为网站提供网页服务。 网页可以通过单个 HTML 文件或组合在一起的复杂资源来呈现。 如果您想在 Internet 上托管 Web 应用程序,在许多情况下您将需要 Web 服务器。
Web 服务器最常见的用例之一是提供在浏览器中呈现网站所需的文件。 当您访问时 http://www.xxxxxxx.com
,您首先输入一个通过 Internet 启动请求的 URL。 该请求会经过多个层,其中一个或多个层将是 Web 服务器。 该网络服务器生成对您的请求的响应,在本例中是 DigitalOcean 网站,特别是主页。 理想情况下,这一切会很快发生,并且 24/7 可用。
虽然 DigitalOcean 主页的任何访问者都会将其体验为单个网页,但实际上当今大多数现代网页都是许多资源的组合。 Web 服务器充当后端和前端之间的中介,将 HTML 和 CSS 文件等资源提供给 JSON 数据,所有这些资源都是动态生成或静态提供的。 如果您打算以任何身份使用网站或在线应用程序,那么熟悉网络服务器是什么及其工作原理的基础知识非常有用。
虽然术语“Web 服务器”可以指 软件 本身,也 可以指其所在的硬件 ,但本文特指 Web 服务器软件。 有关此差异的更多详细信息,请查看我们 对云服务器的介绍 。
常见用例
Web服务器通过HTTP和HTTPS协议处理互联网上的请求,也称为 HTTP服务器 。 Web 服务器与其他类型的服务器的不同之处在于,它专门处理这些 HTTP 和 HTTPS 请求,从而区别于应用程序服务器(例如 Gunicorn)和其他协议的服务器(例如 WSGI)。 这些其他服务器通过外部库充当后端编程语言的中介,这与 Web 服务器的抽象级别不同。
以下是 Web 服务器处理的一些常见任务:
- 提供 HTML、CSS 和 JavaScript 文件。
- 提供图像和视频。
- 处理 HTTP 错误消息。
- 通常同时处理用户请求。
- 指导 URL 匹配和重写。
- 处理和提供动态内容。
- 压缩内容以优化数据使用和速度。
- 为您的静态内容启用浏览器缓存。
实际上,以下是一些涉及 Web 服务器的个人项目:
- 你想做一个网站。
- 您想要制作一个连接到互联网的应用程序。
该列表并不全面,并且 Web 服务器可以向最终用户提供的数据类型并没有严格限制。 例如,为 Web API 请求提供服务的 Web 服务器通常会以 JSON 等格式响应数据。
Web 服务器的目标
Web 服务器迎合了受众对速度、可用性、可靠性等的期望。 它们的共同目的是在互联网上提供内容,为了被视为可行的 Web 服务器解决方案,必须考虑以下方面:
- 正常运行时间 :这是指网络服务器在线并运行的时间。 网站需要始终在线才能为用户提供服务,因此高正常运行时间是目标。 这也意味着稳定性和可预测性。 当用户输入 URL 或单击指向您网站的链接时,每次、任何给定时间都应加载预期页面。 唯一的例外是更新或维护时计划的停机时间。 有缺陷或随机崩溃的 Web 服务器会对用户体验产生不利影响。
- 速度 :您的网页应尽可能快地加载。 用户希望他们的请求立即得到满足,否则您可能会失去他们。 在加载缓慢的网页上,即使用户完成了第一次加载,随后的每次长时间加载也会成倍地降低他们再次停留或访问的意愿。
- 并发 :这是指处理同时传入的多个请求。 有太多人试图同时访问您的网站似乎是一件好事,但是当加载时间变慢并且整个服务器崩溃时,这就会成为一个真正的问题。 您的物理或虚拟服务器只有这么多资源,例如 RAM 和 CPU 计算能力,而 Web 服务器必须有效地使用这些资源。
- 可扩展性 :可扩展性是指通过垂直扩展使现有服务器更加强大,或者通过水平扩展向您的设置添加更多服务器。 随着受众的增长,您可能会需要不止一两个小型 Web 服务器。
- 易于设置 :快速启动并运行项目是项目迭代的关键。 简单且可重复的安装过程对于您设置的第一个 Web 服务器以及随后扩展时的多个 Web 服务器非常重要。
- 文档 :Web 服务器很复杂。 最常见的设置会让您快速上手,但您的需求会随着时间的推移而增长。 通常,您会需要不常用的功能。 当那时到来时,良好的文档对于创建满足您需求的定制解决方案至关重要。
- 开发人员支持 :如果核心开发人员不致力于他们自己的项目,那么您就不应该将您的项目提交给他们的项目。 这包括为其软件提供长期支持的计划,以及以错误修复和补丁形式提供的即时短期支持。
- 社区支持 :核心开发团队将处理大部分繁重的工作,但蓬勃发展的社区有助于填补空白。 对于开源项目,这可能意味着对实际代码库的贡献,但强大的社区也将回答您的问题并帮助解决您的具体问题。
虽然网络服务器可以提供不同的解决方案,但它们提供的解决方案源于解决这些相同问题的尝试。 这些问题本身随着时间的推移以及最终用户的需求和期望而演变,从而使该列表成为一个活生生且不断发展的列表。
选择 Web 服务器解决方案
目前最流行的开源 Web 服务器是 Apache 和 Nginx。
Apache 是最早出现的,它是在多个网站普遍存在于单个 Web 服务器上且具有各自的配置文件的情况下构建的。 Nginx 紧随 Apache 而来,当时的需求不再是通过一台服务器为多个网站提供服务,而是通过一台服务器在负载下以极其高效的方式为一个网站提供服务。
虽然 Web 服务器具有相同的目标和问题,但每个解决方案的解释和实现都会有所不同。 这些问题的确切答案决定了任何给定 Web 服务器解决方案的特性。 这里重点介绍 Nginx 和 Apache,因为它们无处不在,但任何 Web 服务器解决方案都会有固执己见。 选择 Web 服务器时,重要的是要牢记您对特定项目的需求。 这样,即使 Web 服务器产品的格局发生变化,您的评估方法仍然以您自己的需求为基础。
以下是 Web 服务器如何尝试实现 Web 服务器目标的一些关键区别:
配置文件的结构
Web 服务器将其设置存储在配置文件中。 您可以通过编辑这些文件来自定义您的 Web 服务器。 配置文件的存储和组织是一个固执己见的结构性问题,它分裂了 Web 服务器产品。
主要区别在于集权和分权之间。 分散式配置文件允许在文件系统级别进行精细控制,这源于在一台服务器上托管多个网站的需要。 集中式配置并不专注于在一台服务器上托管多个网站,而是专注于有效地为单个网站提供服务。 这些配置依赖于 URI 模式匹配,即 URL 与文件名和其他唯一标识符的匹配,而不是依赖于与 Web 服务器的目录结构的匹配。
阿帕奇的 .htaccess
文件作为一项功能促进了分散配置,每个设计决策都源于对文件系统的关注,并具有精细的控制级别。 Nginx 没有相同的文件系统焦点,而是专注于 URI 模式匹配和集中式配置。
处理并发
运行 Web 服务器的物理和虚拟服务器的资源有限,例如 RAM 和 CPU 处理。 您的 Web 服务器如何从根本上管理其请求将对有效使用您的资源产生最大的影响。 单个请求可以为每个请求生成整个进程,也可以在事件驱动的基础上进行处理。 Web 服务器有效处理多个并发请求的能力与基本设计决策相关。
Apache 通过生成进程来处理请求,该进程消耗资源的速度可能会在负载下成为问题。 Nginx 的事件驱动系统处理系统使用更少的资源,并且在负载下性能更高。
提供静态内容
除了网页之外,Web 服务器还会收到对其他资源(例如图像、视频、CSS 文件和 JavaScript 文件)的请求。 由于无论谁请求这些项目始终相同,因此此类内容称为静态内容。 通常,网页本身只是一个 HTML 文件,并未针对请求者进行定制,并且也被视为静态内容。 Web 服务器还可以压缩此静态内容以获得更好的加载时间。
Nginx 由于其事件驱动的请求处理而在提供静态内容方面表现出色。 Apache 还可以提供静态内容,但在大多数设置中,与 Nginx 相比,在负载下的速度和效率并不相同。
提供动态内容
当内容根据请求者进行更改、处理和定制时,该内容被称为动态内容。 例如,当您登录某个网站后,该网站通常会在顶部导航栏中动态填充您的用户名。 动态内容增加了额外的复杂性,因为它迫使 Web 服务器在收到请求时唯一地处理许多请求。 根据请求定制的内容无法提供给所有人,也无法普遍缓存。
在内部处理动态内容消除了额外的抽象层,通常需要将请求移交给外部库。 Apache 本身实现了动态内容处理,具有流行的解决方案堆栈,例如 LAMP( L inux、 A pache、 M ySQL、 PHP )。 Nginx 与语言无关,但需要 PHP-FPM 等外部库来充当 LAMP 堆栈等用例的类似解决方案。
反向代理能力
反向代理位于传统 Web 服务器前面,成为将 HTTP 请求流量路由到其后面的 Web 服务器的中间服务器。 反向代理成为引导 Web 服务器和整个互联网之间流量的网关,并且通常是直接与防火墙连接的层。 虽然大多数 Web 服务器都具有反向代理功能,但 Nginx 是从头开始构建和优化的,是一个强大的反向代理服务器。
Nginx 在现实世界中的重要性很大程度上取决于其反向代理功能和效率。 许多服务器设置将多个传统 Web 服务器放置在 Nginx 反向代理后面,使用 Nginx 根据负载或规则配置确定将请求发送到哪个 Web 服务器。 这种中间角色甚至允许它在某些设置中与 Apache 配对,作为传统 Apache Web 服务器前面的反向代理。
支持生态系统
Nginx 和 Apache 都得到了各自开发团队和社区的大力支持。 作为最流行的开源Web服务器,学习资源非常丰富。 Apache 由非盈利组织 Apache 支持,并且将始终免费使用。 Nginx 的核心是开源的,但理想的功能被锁定在其 Nginx Plus 产品中,包括上游健康检查、会话持久性和高级监控等功能。