前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。
Web服务器的主要作用是为网站提供网页服务。网页可以通过单个 HTML 文件或组合在一起的复杂资源来呈现。如果想在 Internet 上托管 Web 应用程序,在许多情况下我们将需要 Web 服务器。
Web 服务器最常见的用例之一是提供在浏览器中呈现网站所需的文件。当我们访问https://blog.csdn.net/qq_35241329?type=blog
时,首先输入一个 URL,通过 Internet 发起请求。该请求会经过多个层,其中一个或多个层将是 Web 服务器。该网络服务器生成对我们的请求的响应,在本例中是我的CSDN主页。理想情况下,很快会跳转过去。
虽然 我的CSDN主页的任何访问者都会将其体验为单个网页,但实际上当今大多数现代网页都是许多资源的组合。Web 服务器充当后端和前端之间的中介,将 HTML 和 CSS 文件等资源提供给 JSON 数据,所有这些资源都是动态生成或静态提供的。如果我们打算以任何身份使用网站或在线应用程序,那么熟悉网络服务器是什么及其工作原理的基础知识非常有用。
虽然术语“Web 服务器”可以指软件本身,也可以指其所在的硬件,但本文特指 Web 服务器软件。有关此差异的更多详细信息,请查看对云服务器的介绍。
Web服务器通过HTTP和HTTPS协议处理互联网上的请求,也称为HTTP服务器。Web 服务器与其他类型的服务器的不同之处在于,它专门处理这些 HTTP 和 HTTPS 请求,从而区别于应用程序服务器(例如 Gunicorn)和其他协议的服务器(例如 WSGI)。这些其他服务器通过外部库充当后端编程语言的中介,这与 Web 服务器的抽象级别不同。
以下是 Web 服务器处理的一些常见任务:
实际上,以下是一些涉及 Web 服务器的个人项目:
该列表并不全面,并且 Web 服务器可以向最终用户提供的数据类型并没有严格限制。例如,为 Web API 请求提供服务的 Web 服务器通常会以 JSON 等格式响应数据。
Web 服务器迎合了受众对速度、可用性、可靠性等的期望。它们的共同目的是在互联网上提供内容,为了被视为可行的 Web 服务器解决方案,必须考虑以下方面:
虽然网络服务器可以提供不同的解决方案,但它们提供的解决方案源于解决这些相同问题的尝试。这些问题本身随着时间的推移以及最终用户的需求和期望而演变,从而使该列表成为一个活生生且不断发展的列表。
目前最流行的开源 Web 服务器是 Apache 和 Nginx。
Apache 是最早出现的,它是在多个网站普遍存在于单个 Web 服务器上且具有各自的配置文件的情况下构建的。Nginx 紧随 Apache 而来,当时的需求不再是通过一台服务器为多个网站提供服务,而是通过一台服务器在负载下以极其高效的方式为一个网站提供服务。
虽然 Web 服务器具有相同的目标和问题,但每个解决方案的解释和实现都会有所不同。这些问题的确切答案决定了任何给定 Web 服务器解决方案的特性。这里重点介绍 Nginx 和 Apache,因为它们无处不在,但任何 Web 服务器解决方案都会有固执己见。选择 Web 服务器时,重要的是要牢记我们对特定项目的需求。这样,即使 Web 服务器产品的格局发生变化,我们的评估方法仍然以我们自己的需求为基础。
以下是 Web 服务器如何尝试实现 Web 服务器目标的一些关键区别:
Web 服务器将其设置存储在配置文件中。我们可以通过编辑这些文件来自定义我们的 Web 服务器。配置文件的存储和组织是一个固执己见的结构性问题,它分裂了 Web 服务器产品。
主要区别在于集权和分权之间。分散式配置文件允许在文件系统级别进行精细控制,这源于在一台服务器上托管多个网站的需要。集中式配置并不专注于在一台服务器上托管多个网站,而是专注于有效地为单个网站提供服务。这些配置依赖于 URI 模式匹配,即 URL 与文件名和其他唯一标识符的匹配,而不是依赖于与 Web 服务器的目录结构的匹配。
Apache 的.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 产品中,包括上游健康检查、会话持久性和高级监控等功能。
如果我们希望服务器随时准备好响应传入的 HTTP 请求,那么 Web 服务器最适合完成此任务。当我们进一步偏离服务 HTTP 请求时,Web 服务器将不再是理想的解决方案。对于 Web 服务器提供的辅助功能尤其如此。例如,根据设置,可以在反向代理或 CDN 级别更有效地处理缓存等功能。
此外,随着开发人员将开发资源的重点转向管理 Web 服务器,无服务器、无头 CMS 和 Jamstack 等解决方案应运而生。这些解决方案不需要自托管 Web 服务器,而是将 Web 服务器层抽象为外部服务。对于不需要对 Web 服务器层进行精细或高级控制的开发人员来说,开发时间可以集中在其他地方。
在本文中,我们已经了解了 Web 服务器是什么、它们的使用方式以及它们试图解决的问题的基本入门知识。掌握了这些知识后,我们就可以深入了解当前的 Web 服务器解决方案,并运用我们的知识来寻找专门适合我们需求的解决方案。