The Wayback Machine - https://web.archive.org/web/20221028212745/https://baike.sogou.com/kexue/d10190.htm

网络服务器

编辑
戴尔PowerEdge Web服务器(为机架安装设计的计算机)的内部和前端部

网络服务器是能够满足万维网客户端请求的服务器软件或专用于运行所述软件的硬件。网络服务器通常可以包含一个或多个网站。网络服务器通过超文本传输协议和其他几个相关协议处理传入的网络请求。[1]

网络服务器的主要功能是存储、处理网页并将其提交给客户端。[2]客户机和服务器之间的通信使用超文本传输协议(HTTP)进行。提交的页面是最常见的超文本标记语言文档,除了文本内容之外,还可能包括图像、样式表和脚本。

用户代理(通常是网络浏览器或网络爬虫)通过使用超文本传输协议对特定资源发出请求来启动通信,服务器将回应资源的内容,如果不这样做,将相应错误的消息。资源通常是服务器辅助存储上的真实文件,但情况不一定如此,这取决于网络服务器的实现方式。

虽然主要功能是提供内容,但是全面实现超文本传输协议还包括从客户端接收内容的方式。此功能用于提交网络表单,包括上传文件。

许多通用网络服务器也支持使用活动服务器页面(ASP)、超文本预处理器(PHP)或其他脚本语言的服务器端脚本。这意味着网络服务器的行为可以在单独的文件中编写脚本,而实际的服务器软件保持不变。通常,该函数用于动态生成超文本标记语言文档(“动态”),而不是返回静态文档。前者主要用于从数据库中检索或修改信息。后者通常要快得多,也更容易缓存,但不能传递动态内容。

网络服务器通常嵌入在打印机、路由器、网络摄像头等设备中,仅服务于本地网络。然后,网络服务器可以用作监控或管理所述设备的系统的一部分。这通常意味着无需在客户端计算机上安装额外的软件,因为只需要一个网络浏览器(现在大多数操作系统都包括该浏览器)。

1 历史编辑

世界上第一台网络服务器,一台带有以太网的NeXT计算机工作站,1990年。机箱标签上写着:“这台机器是一台服务器。请不要断电!”

Sun的Cobalt Qube 3 - 计算机服务器设备(2002年,已停产)

1989年3月,蒂姆·伯纳斯·李爵士向他的雇主欧洲粒子物理研究所(CERN)提出了一个新项目,目标是通过使用超文本系统来简化科学家之间的信息交流。[3][4] 该项目导致伯纳斯-李在1990年写了两个项目:

  • 一种叫做万维网的网络浏览器[5]
  • 世界上第一个网络服务器,后来被称为CERN httpd,运行在 NeXTSTEP

1991年至1994年间,早期用于通过万维网冲浪和交换数据的技术的简单性和有效性,有助于将其移植到许多不同的操作系统,并在科学组织和大学之间以及随后在工业中推广使用。

1994年,伯纳斯-李决定成立万维网联盟(W3C),以通过标准化过程规范所涉及的许多技术(超文本链接协议、超文本链接协议等)的进一步发展。

2 路径转换编辑

网络服务器能够将统一资源定位器的路径组件映射到:

  • 本地文件系统资源(用于静态请求)
  • 内部或外部程序名称(用于动态请求)

对于静态请求,客户端指定的网址路径和网络服务器的根目录相关。

请考虑以下网址,因为它是由客户端通过超文本传输协议请求的:

http://www.example.com/path/file.html

客户端的用户代理将通过以下HTTP 1.1请求将其转换为与www.example.com的连接:

获取/路径/文件
主机: www.example.com

www.example.com的网络服务器将把给定的路径附加到其根目录的路径上。在Apache服务器上,这通常是/home/www(在Unix机器上,通常是/var/www)。结果是本地文件系统资源:

/home/www/path/file.html

然后,网络服务器读取文件(如果存在),并向客户端的网络浏览器发送响应。响应将描述文件的内容并包含文件本身,或者将返回一条错误消息,指出文件不存在或不可用。

3 内核模式和用户模式的网络服务器编辑

网络服务器可以集成到操作系统内核中,也可以集成到用户空间中(像其他常规应用程序一样)。

以用户模式运行的网络服务器必须请求系统允许使用更多内存或更多CPU资源。这些对内核的请求不仅需要时间,而且并不总是得到满足,因为系统会为自己的使用保留资源,并为所有其他正在运行的应用程序共享硬件资源而负责。在用户模式下执行也可能意味着无用的缓冲副本,这是用户模式网络服务器的另一个缺点。

4 负载极限编辑

网络服务器(程序)已定义了负载限制,因为它只能处理每个IP地址(和TCP端口)中的有限数量的并发客户端连接(通常在2到80,000之间,默认情况下在500到1,000之间),并且它每秒只能服务于特定的最大请求数(RPS,也称为每秒查询或QPS),具体取决于:

  • 自己的设置
  • HTTP请求类型
  • 内容是静态的还是动态的
  • 内容是否 缓存,以及
  • 运行网络服务器的计算机操作系统的硬件和软件限制。

当网络服务器接近或超过其极限时,它将变得无响应。

4.1 超载的原因

由于以下原因,网络服务器随时可能超载:

  • 过多的合法网络流量。成千上万甚至数百万的客户端在短时间内连接到网站,例如Slashdot效应;

  • 分布式拒绝服务攻击。拒绝服务攻击(DoS攻击)或分布式拒绝服务攻击(DDoS攻击)会试图使计算机或网络资源对其预期用户不可用;

  • 有时会导致数百万台受感染的计算机(它们之间不协调)产生异常流量的计算机蠕虫
  • XSS蠕虫会因为导致数百万的浏览器或网络服务器被感染而导致高流量;
  • 互联网机器人流量在资源(带宽等)很少的大型网站上不受过滤/限制;
  • 互联网(网络)速度变慢,因此客户端请求的服务速度更慢,连接数也增加得如此之多,以至于达到了服务器限制;
  • Web服务器(计算机)部分不可用。这可能是因为需要或紧急维护或升级、硬件或软件故障、后端(例如数据库)故障等。在这些情况下,剩余的web服务器会有太多的流量,并会过载。

4.2 过载症状

网络服务器过载的症状是:

  • 请求会有(可能很长)延迟(从1秒到几百秒)。
  • 网络服务器返回一个不适合过载情况的错误代码,如500、502[6] 、503[7] 、504[8]、408,甚至404。[9]
  • 网络服务器在返回任何内容之前拒绝或重置(中断)TCP连接。
  • 在极少数情况下,网络服务器只返回请求内容的一部分。这种行为可以被认为是一种错误,即使它通常是作为过载的表现出现的。

4.3 抗过载技术

为了部分克服超过平均负载限制并防止过载,大多数流行的网站使用常见的技术,例如:

  • 通过以下方式管理网络流量:
    • 防火墙阻止来自恶意IP源地址或有恶意模式的非预期的流量
    • 超文本传输协议流量管理器丢弃、重定向或重写具有不良超文本传输协议模式的请求
    • 带宽管理和流量整形,以降低网络使用峰值
  • 部署网络缓存技术
  • 通过不同的网络服务器使用不同的域名或IP地址来提供不同的(静态和动态)内容,例如:
    • http://images.example.com
    • http://example.com

  • 使用不同的域名或计算机将大文件与中小文件分开;这样做的目的是能够完全缓存中小型文件,并通过使用不同的设置高效地为大文件或大型文件(超过10 - 1000兆字节)提供服务

  • 每台计算机使用许多互联网服务器(程序),每台服务器都绑定到自己的网卡和IP地址
  • 使用许多互联网服务器(计算机),这些服务器通过负载平衡器组合在一起,以便它们充当或被视为一个大的网络服务器
  • 向每台计算机添加更多硬件资源(即内存、磁盘)
  • 针对硬件功能和用途调整操作系统参数
  • 为网络服务器等使用更高效的计算机程序。
  • 使用其他变通方法,尤其是在涉及动态内容的情况下

5 市场占有率编辑

LAMP(软件包)(此外还有Squid)完全由免费和开源软件组成,是一种针对恶劣环境的高性能和高可用性的重型解决方案

图: 2005-2018年各大web服务器网站市场占有率

5.1 2019年2月

以下是W3Techs网站使用网络服务器的最新统计数据,显示了互联网上所有顶级网络服务器的市场份额。

产品 发行商 百分比
Apache Apache 44.3%
nginx NGINX, Inc. 41.0%
IIS Microsoft 8.9%
LiteSpeed Web Server LiteSpeed Technologies 3.9%
GWS Google 0.9%

其他所有被使用的网络服务器占比不到1%的网站。

5.2 2018年7月

以下是W3Techs网站使用网络服务器的最新统计数据,显示了互联网上所有顶级网络服务器的市场份额。

产品 发行商 百分比
Apache Apache 45.9%
nginx NGINX, Inc. 39.0%
IIS Microsoft 9.5%
LiteSpeed Web Server LiteSpeed Technologies 3.4%
GWS Google 1.0%

其他所有被使用的网络服务器占比不到1%的网站。

5.3 2017年2月

以下是Netcraft2017年2月网络服务器调查,是对互联网上所有顶级网络服务器的市场份额的最新统计。

产品 发行商 2017年1月 百分比 2017年2月 百分比 变化 图表颜色
IIS Microsoft 821,905,283 45.66% 773,552,454 43.16% -2.50 红色
Apache Apache 387,211,503 21.51% 374,297,080 20.89% -0.63 黑色
nginx NGINX, Inc. 317,398,317 17.63% 348,025,788 19.42% 1.79 绿色
GWS Google 17,933,762 1.00% 18,438,702 1.03% 0.03 蓝色

5.4 2016年2月

以下是Netcraft2016年2月网络服务器调查,是对互联网上所有顶级网络服务器的市场份额的最新统计。

产品 发行商 2016年1月 百分比 2016年2月 百分比 变化 图表颜色
Apache Apache 304,271,061 33.56% 306,292,557 32.80% 0.76 黑色
IIS Microsoft 262,471,886 28.95% 278,593,041 29.83% 0.88 红色
nginx NGINX, Inc. 141,443,630 15.60% 137,459,391 16.61% -0.88 绿色
GWS Google 20,799,087 2.29% 20,640,058 2.21% -0.08 蓝色

Apache、IIS和Nginx是万维网上最常用的网络服务器。[10]

参考文献

  • [1]

    ^"What is web server?'". webdevelopersnotes. 2010-11-23. Retrieved 2019-02-01..

  • [2]

    ^Patrick, Killelea (2002). Web performance tuning (2nd ed.). Beijing: O'Reilly. p. 264. ISBN 059600172X. OCLC 49502686..

  • [3]

    ^Zolfagharifard, Ellie (2018-11-24). "'Father of the web' Sir Tim Berners-Lee on his plan to fight fake news". The Telegraph (in 英语). ISSN 0307-1235. Retrieved 2019-02-01..

  • [4]

    ^"History of Computers and Computing, Internet, Birth, The World Wide Web of Tim Berners-Lee". history-computer.com. Retrieved 2019-02-01..

  • [5]

    ^Macaulay, Tom. "What are the best open source web servers?". ComputerworldUK. Retrieved 2019-02-01..

  • [6]

    ^Fisher, Tim; Lifewire. "Getting a 502 Bad Gateway Error? Here's What to Do". Lifewire (in 英语). Retrieved 2019-02-01..

  • [7]

    ^Fisher, Tim; Lifewire. "Getting a 503 Service Unavailable Error? Here's What to Do". Lifewire (in 英语). Retrieved 2019-02-01..

  • [8]

    ^"What is a 502 bad gateway and how do you fix it?". IT PRO (in 英语). Retrieved 2019-02-01..

  • [9]

    ^Handbook of digital forensics and investigation. Casey, Eoghan., Altheide, Cory. Burlington, Mass.: Academic Press. 2010. p. 451. ISBN 9780080921471. OCLC 649907705..

  • [10]

    ^Hadi, Nahari (2011). Web commerce security: design and development. Krutz, Ronald L. Indianapolis: Wiley Pub. ISBN 9781118098899. OCLC 757394142..

阅读 4822
版本记录
  • 暂无