目前最主流的3个Web
服务器是Apache、Nginx、IIS。
除了Web
服务器,还有应用服务器,它们主要用于运行动态语言PHP
、JSP
的服务器。
在说明选型考虑的因素前,先回顾一下WEB发展的3个阶段:
- Web 1.0时代 (1990年代中期)
Web 1.0
是指互联网的早期阶段,大约从1991年至2004
年左右。在这个阶段,
Web
主要是以静态网页为主,网页内容主要是由HTML
、CSS
、JavaScript
等技术组成,网页的内容呈现形式以文本和图片为主,用户主要是通过超链接进行简单的页面跳转和浏览。Web 1.0时代的技术基础主要是
HTML
、CSS
和JavaScript
等前端技术,后端技术主要是CGI
、ASP
、PHP
等脚本语言。网站的部署和维护主要是通过FTP
等传统的文件传输协议进行,缺乏现代化的开发、测试和部署工具。总的来说,
Web 1.0
时代是互联网的初期阶段,虽然网站的功能和交互性较低,但它为后续的Web
发展和演化奠定了基础。Web 1.0
时代的经验和教训也启示我们,在Web
的发展和演化中,需要不断地引入新的技术和概念,不断地改进用户体验和互动性,才能更好地满足用户的需求和期望。
- Web 2.0时代(2000年代初期)
大约从
2004年
至2010年
左右。在这个阶段,Web
主要是以动态网页和社交媒体为主,内容更加丰富多样化,用户可以通过Web
应用程序进行更加复杂的交互和操作。
Web 2.0
时代的网站大多采用开放标准和技术,如Ajax
、XML
、RSS
等,用户可以通过浏览器和Web
应用程序进行更加灵活的操作和交互。此外,Web 2.0
时代的网站开发和管理也得到了极大的改进和提升,出现了许多新的工具和框架,如jQuery
、Bootstrap
、React
等,使得网站的开发和维护更加高效、便捷。同时,Web 2.0
也促进了开放数据、开放知识等概念的发展,使得互联网变得更加开放、透明和共享。
Web 2.0
时代的网站主要以社交媒体、博客和在线办公应用为主,如WordPress
、Google Docs
等。这些网站的特点是用户生成的内容多,个性化程度高,交互性强,用户可以通过分享、评论、点赞等方式与其他用户进行互动。
Web 2.0
时代是互联网的一个重要阶段,它为互联网的发展和演化带来了重大的影响和变革。
- Web 3.0时代(当前)
Web 3.0
是指互联网的第三个阶段,也被称为智能互联网或语义互联网,其主要特点是实现了数据的智能化、语义化和分布式存储,使得互联网可以更加智能、开放、安全和去中心化。Web 3.0的相关技术包括:
- 人工智能(AI):
Web 3.0
时代的互联网需要具备智能化的能力,可以通过机器学习、自然语言处理等技术对数据进行分析和处理,提高数据的质量和价值。- 区块链(Blockchain):
Web 3.0
的互联网需要具备去中心化的能力,可以通过区块链技术实现分布式存储和去中心化的管理,保护数据的安全和隐私。- 语义Web(Semantic Web):
Web 3.0
的互联网需要具备语义化的能力,可以通过RDF
、OWL
等技术对数据进行描述和表示,使得数据能够被机器理解和利用。- Web服务(Web Services):
Web 3.0
的互联网需要具备开放性的能力,可以通过Web
服务实现跨平台、跨语言的数据交互和共享。- 物联网(Internet of Things,IoT):
Web 3.0
的互联网需要具备智能化的能力,可以通过物联网技术实现设备之间的互联、数据共享和智能化管理。- 3D技术(3D Web):
Web 3.0
的互联网需要具备虚拟化和沉浸式的能力,可以通过3D
技术实现虚拟现实、增强现实等新的应用和体验。- 大数据(Big Data):
Web 3.0
的互联网需要具备数据驱动的能力,可以通过大数据技术实现对海量数据的处理和分析,提高数据的价值和意义。总的来说,
Web 3.0
的相关技术是多种多样的,它们共同构成了一个智能、开放、安全和去中心化的互联网生态系统。这些技术的不断发展和应用将带来更多新的应用和机会,推动互联网的发展和演化。
1.稳定性考虑
目前,在云上LNMP(Linux+Nginx+MySQL+PHP)
架构的应用也明显比LAMP(Linux+Apache+MySQL+PHP)
要多,有替代其趋势。这里要注意的是,Nginx+FastCGI(PHP-FPM)
经常出502
错误,不是Nginx
不稳定导致的问题,Nginx
甚至运行几十年都不会出现稳定性问题,而更多是后端PHP
运行出现错误,直接体现到Nginx
检测出后端的异常,从而报出502
的HTTP
状态码。
所以部署前优先选用Nginx
作为WEB服务器。
2.性能考虑
Nginx
基于EpoIl
网络IO
模型,Apache
基于SeIect
网络模型。
Nginx
相比Apache
,高性能、高并发、系统资源占用少。
Nginx
核心特点是轻量级。Nginx
官网表示,Nginx
保持10000个
没有活动的连接,而这些连接只占用2.5MB
内存。而在3万
并发连接下,开启10
个Nginx
线程消耗的内存不到200MB
。因此,类似DOS
这样的攻击对Nginx
来说基本上是没有任何作用。而在性能力面,Apache
是可望而不可即的。Apache
强大的处理功能导致各种模块过于臃肿,带来性能上的较大损耗。
3.对负载均衡功能的支持考虑
Nginx
不仅能作为七层/四层方面的负载均衡,在Web
服务器、静态缓存、丰富的第三方插件等其他方面的功能也很优秀,这让用户选择HAProxy
的可能性降低。
而相比Nginx
、Apache
也支持七层的负载均衡功能,Apache+Tomcat
经典的组合,就是利用Apache
七层负载均衡的功能。在七层,Apache
有专门的proxy
模块来实现这样的负载均衡配置。相比Nginx+Tomcat
的组合,Apache
针对Tom
的集成的紧密度更深。Apache
服务器和Tomcat
的连接方法其实有3种:JK
、http_proxy
和ajp_proxy
。不过Apache
在七层负载均衡的性能,相比于Nginx
来讲,要弱太多。
4.前端静态数据缓存考虑
在web
存服务方面,Nginx
可通自身的proxy_cache
模块实现类squid
等专业缓存软件的功能。
在静态缓存这块,一般采用squid
、varnish
、Nginx
,当前CDN
产品的出现,底层其实就是采用这3个开源缓存技术。虽然Apache
也能做静态缓存这块功能,但至少没听说过CDN
的静态缓存是用Apache
来实现的。另外,Nginx
的静态资源,如图片、HIML
、CSS
、JS
等的处理能力也要强于Apache
。
5.插件及二次开发考虑
Nginx
在热门开源软件中都有相应的丰富插件。比如针对Memcache
、Redis
、LDAP
、MongoDB
的插件,让Nginx
也能对Memcache
、Redis
、LDAP
、MongoDB
做反向代理。
虽然Nginx
有很多的特性和优势,但是随着Nginx
的应用逐渐深人,Nginx
自带的功能特性可能满足不了我们特定场景下的需求,不可避免地需要一些定制化的功能,即需要做二次开发。而Nginx
源代码采用C语言
开发,这将使我们的二次开发变得非常复杂。为了方便开发人员,OpenResty
整合了Nginx
和Lua
的框架,它帮我们实现用Lua
的规范开发实现各种业务,并且理清各个模块的编译顺序。而同时OpenResty
在云端开源WAF
上使用得非常广泛。
OpenResty
是云端开源WAF
的最佳实践。