---
title: "【转载】Web服务器软件，你了解多少？"
author: "Perrin Yong"
author_profile: https://www.pystone.net/profile/
published_by: "Perrin Yong"
canonical: https://www.pystone.net/notes/web-server-software-overview/
type: note
content_role: unspecified
visibility: public
id_stability: rename-stable
source_path: "10-计算机、信息技术与工程/01-系统基础与网络安全/网络工程/【转载】Web服务器软件，你了解多少？.md"
content_hash: f498a19db527a4af45c53d09736dde4325cd24e08fb428b33b5ddecab1b02d3f
knowledge_version: 224c990773de.5fa8af6e39fa
site_commit: 224c990773de166d23a886306577dd90379529ce
notes_commit: 5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a
---
# 【转载】Web服务器软件，你了解多少？

> 创建时间：2021/9/14 22:03

[
![assets/v2-54186d214a802a02c3e191bb39d23699_l.jpg](/media/8fc94761f9c5677d7ed1.jpg)
](https://www.zhihu.com/people/you-yu-59-42-43)

[幽虞](https://www.zhihu.com/people/you-yu-59-42-43)
' d='M21.351 4.858A3.115 3.115 0 0 1 22.93 7.56v8.88a3.115 3.115 0 0 1-1.578 2.702l-7.774 4.44a3.185 3.185 0 0 1-3.154 0l-7.774-4.44A3.115 3.115 0 0 1 1.07 16.44V7.56c0-1.115.602-2.145 1.578-2.702l7.774-4.44a3.185 3.185 0 0 1 3.154 0l7.774 4.44zm-2.475 1.904L13.16 3.507a2.347 2.347 0 0 0-2.32 0L5.124 6.762a2.283 2.283 0 0 0-1.16 1.982v6.512c0 .817.442 1.573 1.16 1.982l5.716 3.255a2.347 2.347 0 0 0 2.32 0l5.716-3.255a2.283 2.283 0 0 0 1.16-1.982V8.744c0-.817-.442-1.573-1.16-1.982zm-9.874 4.13L12 5.76l2.998 5.131 2.466-2.12v6.343c0 .49-.4.886-.893.886H7.429a.89.89 0 0 1-.893-.887V8.771l2.466 2.12z'%3e%3c/path%3e%3c/svg%3e)

基本概念

打好基础很重要！

Web服务器是一台使用HTTP协议与客户机浏览器进行信息交流（因此又称为HTTP服务器）、为互联网客户提供服务（信息浏览，下载资源等）的主机。发展趋势：从HTML到XML、从有线到无线、从无声到有声。

Web服务器的工作原理一般可分成如下4个步骤：

① 连接过程：是Web服务器和其浏览器之间所建立起来的一种连接。查看连接过程是否实现，用户可以找到和打开socket这个虚拟文件，这个文件的建立意味着连接过程这一步骤已经成功建立。

② 请求过程：是Web的浏览器运用socket这个文件向其服务器而提出各种请求。

③ 应答过程：是运用HTTP协议把在请求过程中所提出来的请求传输到Web的服务器，进而实施任务处理，然后运用HTTP协议把任务处理的结果传输到Web的浏览器，同时在Web的浏览器上面展示上述所请求之界面。

④ 关闭连接：是当上一个步骤--应答过程完成以后，Web服务器和其浏览器之间断开连接之过程。Web服务器上述4个步骤环环相扣、紧密相联，逻辑性比较强，可以支持多个进程、多个线程以及多个进程与多个线程相混合的技术。

Web服务器仅仅提供一个可以执行服务器端程序和返回（程序所产生的）响应的环境，而不会超出职能范围。服务器端程序功能通常有：事务处理、数据库连接、和消息等。虽然Web服务器不支持事务处理或数据库连接池，但它可以配置各种策略来实现容错性、可扩展性（如：负载平衡、缓冲）。集群特征经常被误认为仅仅是应用程序服务器专有的特征。

![assets/v2-ee0e3a086dd978bb7880ee30be1e8154_b.jpg](/media/58b8e2b21e3e94172572.jpg)
主流Web服务器

Unix/Linux/Windows/MacOS等操作系统下使用最广泛的免费HTTP服务器：Apache、Nginx、Tomcat，Windows Server系列操作系统使用IIS，综合使用最多的Web服务器是 Apache。

什么是IIS

IIS全程为Internet Information Service（Internet信息服务），它的功能是提供信息服务，如架设http、ftp服务器等，是WindowsNT内核的系统自带的，不需要下载。

其语言版本与系统安装盘的语言是一样的，即中文版的NT内核的操作系统自带ISS中文版的ISS。版本在不同的系统中是不一样的。WinNT中为4.0，Win2000中为5.0，WinXP中为5.1，Win2003中为6.0，win2008 r2为iis7.5，win2012为iis8不同版本功能不太一样。

IIS是随Windows NT Server 4.0一起提供的文件和应用程序服务器，是在Windows NT Server上建立Internet服务器的基本组件。它与Windows NT Server完全集成，允许使用Windows NT Server内置的安全性以及NTFS文件系统建立强大灵活的Internet／Intranet站点。

什么是Apache

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上，由于其跨平台和安全性被广泛使用，是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充，将Perl/Python等解释器编译到服务器中。

Apache HTTP Server（简称Apache）是Apache软件基金会的一个开放源码的网页服务器，可以在大多数计算机操作系统中运行，由于其多平台和安全性被广泛使用，是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展，将Perl/Python等解释器编译到服务器中。

Apache HTTP服务器是一个模块化的服务器，源于NCSAhttpd服务器，经过多次修改，成为世界使用排名第一的Web服务器软件。

它可以运行在几乎所有广泛使用的计算机平台上。

![assets/v2-c17491f9ad57f111e1447c4ac8de8a83_720w.jpg](/media/64c681e1c3ec86c374cb.jpg)

什么是Nginx

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器；同时也是一个IMAP、POP3、SMTP代理服务器；Nginx可以作为一个HTTP服务器进行网站的发布处理，另外Nginx可以作为反向代理进行负载均衡的实现。

Nginx使用基于事件驱动架构，使得其可以支持数以百万级别的TCP连接

高度的模块化和自由软件许可证是的第三方模块层出不穷（这是个开源的时代啊~）

Nginx是一个跨平台服务器，可以运行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操作系统上

这些优秀的设计带来的极大的稳定性！

![assets/v2-07a2d479c5c5fd19f071284ba11d8a34_r.jpg](/media/72725b2f4839df209fd5.jpg)

什么是Tomcat

tomcat是一个中间件，在B/S架构中，浏览器发出的http请求经过tpmcat中间件，转发到最终的目的服务器上，响应消息再通过tomcat返回给浏览器。

tomcat所做的事情主要有：开启监听端口监听用户的请求，解析用户发来的http请求然后访问到你指定的应用系统，然后你返回的页面经过tomcat返回给用户。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器，属于轻量级应用服务器，在中小型系统和并发访问用户不是很多的场合下被普遍使用，是开发和调试JSP 程序的首选。

对于一个初学者来说，可以这样认为，当在一台机器上配置好Apache 服务器，可利用它响应HTML（标准通用标记语言下的一个应用）页面的访问请求。实际上Tomcat是Apache 服务器的扩展，但运行时它是独立运行的，所以当你运行tomcat 时，它实际上作为一个与Apache 独立的进程单独运行的。

![assets/v2-3b7f41edc3bbb383cf38faa0f49339d9_720w.jpg](/media/096cf727364a6b736404.jpg)

优势对比

不存在差劲的服务器，只是应用场景不对

先说IIS，如果成本是你的首要考虑，LAMP组合制定将更便宜，因为没有许可费用。其中，考虑到安全性，apache被普遍认为是更安全的选择。如果你想运行Windows操作系统服务器上其他任何东西，IIS显然不是好的选择。但是，如果你想运行依赖于ASPX的脚本，那么你需要去选择IIS，因为它比LAMP出现故障时候更容易去排除。

再说到Apache和Nginx，一般来说，需要性能的web 服务，用nginx 。如果不需要性能只求稳定，那就apache 吧。后者的各种功能模块实现得比前者，例如ssl 的模块就比前者好，可配置项多。这里要注意一点，epoll(freebsd 上是 kqueue )网络IO 模型是nginx 处理性能高的根本理由，但并不是所有的情况下都是epoll 大获全胜的，如果本身提供静态服务的就只有寥寥几个文件，apache 的select 模型或许比epoll 更高性能。当然，这只是根据网络IO 模型的原理作的一个假设，真正的应用还是需要实测了再说的。

![assets/v2-543728700d7e4e9df798103cd58366e9_r.jpg](/media/7f8fc6f672b765d3d86f.jpg)

![assets/v2-b32e3472175050438092bbda9f1ec765_r.jpg](/media/801197eda18028d31dc6.jpg)

以下是我的总结：

1、作为 Web 服务器：相比 Apache，Nginx 使用更少的资源，支持更多的并发连接，体现更高的效率，这点使 Nginx 尤其受到虚拟主机提供商的欢迎。在高连接并发的情况下，Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50000 个并发连接数的响应, 感谢Nginx为我们选择了 epoll and kqueue 作为开发模型.

Nginx作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多.

2、Nginx 配置简洁, Apache 复杂 ，Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行，即使运行数个月也不需要重新启动. 你还能够不间断服务的情况下进行软件版本的升级 . Nginx 静态处理性能比 Apache 高 3倍以上 ，Apache 对 PHP 支持比较简单，Nginx 需要配合其他后端来使用 ,Apache 的组件比 Nginx 多.

3、最核心的区别在于apache是同步多进程模型，一个连接对应一个进程；nginx是异步的，多个连接（万级别）可以对应一个进程 .

4、nginx的优势是处理静态请求，cpu内存使用率低，apache适合处理动态请求，所以现在一般前端用nginx作为反向代理抗住压力，apache作为后端处理动态请求。

![assets/v2-d27716ea1311a61b21ab8e917c8e1224_720w.jpg](/media/faecb49b9bf3deb58a62.jpg)

扫码关注我的微信公众号

发布于 2019-10-19

[Web 开发](https://www.zhihu.com/topic/19550516)

[服务器](https://www.zhihu.com/topic/19554575)

[Web 服务器软件](https://www.zhihu.com/topic/19564827)
