HTTP Server
严格的来说,Apache/Nginx 应该叫做「HTTP Server」,类似Tomcat、WebLogic、(flask、Django内部自带的Web服务器)这些称为「Application Server」更合适。
一个 HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,所以在 Apache/Nginx 上你可以看到代理、负载均衡等功能。客户端通过 HTTP Server 访问服务器上存储的资源(HTML 文件、图片文件等等)。通过 CGI 技术,也可以将处理过的内容通过 HTTP Server 分发,但是一个 HTTP Server 始终只是把服务器上的文件如实的通过 HTTP 协议传输给客户端。
Nginx
开源的HTTP服务器软件(当然它也可以作为邮件代理服务器、通用的TCP代理服务器)
1 | 1.轻量级,同样的web服务,比apache占用更少的内存及资源 |
2 | 2.抗并发,nginx处理请求是异步非阻塞的,而apache则是阻塞型的,在高并发下nginx能保持低资源低消耗高性能 |
3 | 3.高度模块化的设计,编写模块相对简单 |
4 | 4.社区活跃,各种高性能模块出品迅速 |
Apache HTTP Server
Apache HTTP Server项目是为现代操作系统(包括UNIX和Windows)开发和维护开源HTTP服务器的一项工作。该项目的目标是提供一个安全,高效且可扩展的服务器,该服务器提供与当前HTTP标准同步的HTTP服务。
Apache HTTP Server(“ httpd”)于1995年推出,自1996年4月以来一直是Internet上最受欢迎的Web服务器。作为一个项目,它在2015年2月庆祝了其20岁生日。
Apache HTTP Server是Apache Software Foundation的项目。
1 | # apache相对于nginx的优点 |
2 | 1.rewrite,比nginx的rewrite强大 |
3 | 2.动态页面 |
4 | 3.模块超多,基本想到的都可以找到 |
5 | 4.少bug,nginx的bug相对较多 |
6 | 5.超稳定 |
Haproxy
使用决策
一般来说,需要性能的web服务,用nginx。如果不需要性能只求稳定,那就apache。如果要进行四层负载,那最好Haproxy
Application Server
应用服务器,是一个应用执行的容器。它首先需要支持开发语言的 Runtime(对于 Tomcat 来说,就是 Java),保证应用能够在应用服务器上正常运行。其次,需要支持应用相关的规范,例如类库、安全方面的特性。对于 Tomcat 来说,就是需要提供 JSP/Sevlet 运行需要的标准类库、Interface 等。为了方便,应用服务器往往也会集成 HTTP Server 的功能,但是不如专业的 HTTP Server 那么强大,所以应用服务器往往是运行在 HTTP Server 的背后,执行应用(这也是为什么很多web服务器已经实现了功能,却还是使用nginx服务器做负载分发),将动态的内容转化为静态的内容之后,通过 HTTP Server 分发到客户端。
Oracle WebLogic
WebLogic不开源不免费
Tomcat
Tomcat开源免费
IBM HTTP Server
IBM的服务
Red Hat JBoss
红帽JBoss Web服务器是一组完全集成并经过认证的组件,用于托管Java Web应用程序。它由一个Web服务器(Apache HTTP Server),应用程序服务器(Apache Tomcat Servlet容器),负载均衡器(mod_jk和mod_cluster)以及Tomcat本机库组成。
官方文档
IIS Web Server
windows上的服务,Internet信息服务(IIS)7和更高版本提供了一种请求处理体系结构
官方文档
- Windows进程激活服务(WAS),使站点可以使用HTTP和HTTPS以外的协议。
- 可以通过添加或删除模块来自定义Web服务器引擎。
- 来自IIS和ASP.NET的集成请求处理管道。
AWS Elastic Load Balancing
亚马逊的服务
总结
HTTP服务器本质上也是一种应用程序——它通常运行在服务器之上,绑定服务器的IP地址并监听某一个tcp端口来接收并处理HTTP请求,这样客户端(一般来说是IE, Firefox,Chrome这样的浏览器)就能够通过HTTP协议来获取服务器上的网页(HTML格式)、文档(PDF格式)、音频(MP4格式)、视频(MOV格式)等等资源。
不仅仅是Apache HTTP Server和Nginx,绝大多数编程语言所包含的类库中也都实现了简单的HTTP服务器方便开发者使用。(如:Python SimpleHTTPServer),使用这些类库能够非常容易的运行一个HTTP服务器,它们都能够通过绑定IP地址并监听tcp端口来提供HTTP服务。
Apache HTTP Server和Nginx本身不支持生成动态页面,但它们可以通过其他模块来支持(例如通过Shell、PHP、Python脚本程序来动态生成内容)。
但是如果想要使用编程语言来动态生成资源内容,使用这一类HTTP服务器很难做到。
所以我们需要能动态生成页面,并处理HTTP请求并相应的程序