Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
nginx做为HTTP服务器,有以下几项基本特性:
- 处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。
- 无缓存的反向代理加速,简单的负载均衡和容错.
- FastCGI,简单的负载均衡和容错.
- 模块化的结构。包括gzipping, byte ranges, chunked responses,以及 ssi-filter等filter。如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待。
- Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率。它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。
- Nginx具有很高的稳定性。其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前apache一旦上到200个以上进程,web响应速度就明显非常缓慢了。而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。nginx官方表示保持10,000个没有活动的连接,它只占2.5M内存,所以类似DOS这样的攻击对nginx来说基本上是毫无用处的。就稳定性而言,nginx比lighthttpd更胜一筹。
- Nginx支持热部署。它的启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。
Lighttpd 是一个德国人领导的开源WEB服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销、cpu占用率低、效能好以及丰富的模块等特点。
Lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持Fastcgi,CGI,Auth,输出压缩(output compress),URL重写,Alias等重要功能;而Apache之所以流行,很大程度也是因为功能丰富,在lighttpd上很多功能都有相应的实现了,这点对于apache的用户是非常重要的,因为迁移到lighttpd就必须面对这些问题。
Fastcgi的优点在于:
- 从稳定性上看, fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑.
- 从安全性上看, fastcgi和宿主的server完全独立, fastcgi怎么down也不会把server搞垮,
- 从性能上看, fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态IO处理完全不需要逻辑程序的参与(注1)
- 从扩展性上讲, fastcgi是一个中立的技术标准, 完全可以支持任何语言写的处理程序(php,java,python…)
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
apache 的特性:
- 几乎可以运行在所有的计算机平台上;
- 支持最新的http/1.1协议 ;
- 简单而且强有力的基于文件的配置(httpd.conf);
- 支持通用网关接口(cgi) ;
- 支持虚拟主机;
- 支持http认证;
- 集成perl;
- 集成的代理服务器;
- 可以通过web浏览器监视服务器的状态, 可以自定义日志.;
- 支持服务器端包含命令(ssi);
- 支持安全socket层(ssl);
- 具有用户会话过程的跟踪能力;
- 支持fastcgi;
- 支持java servlets;
网页本质上是html文档。为了能够向访问者提供不同的网页,提供服务的机器需要一个服务器程序。 Nginx和Apache就是这个提供服务的的软件程序,它们可以处理请求进行分析,然后将用户所需要的文档信息返回给访问者。
Nginx与ApacheNginx和Apache都是非常流行的Web服务器。
- Apache于1995年首次发布,Nginx于2004年发布。
- 两者都被全球500强的大型公司使用。
- Nginx的市场份额多年来一直在稳定增长。
- 在某些情况下,Nginx在性能方面更具有竞争优势。
随着蒂姆伯纳斯李创建了html,之后Apache就占据着web服务器的主导地位。现在发行的linux服务器,无论是redhat还是ubuntu,apache都是默认自带的服务器,因此,很多人都是使用Apache来进行web开发的,毕竟人家操作系统已经给你提供好了。
apache受欢迎的一个点就是他的.htacess文件配置管理。
Apache使用.htaccess进行配置,它为处理传入请求的方式提供了很大的灵活性。不同的重定向规则,最大上传文件大小,URL重写,内存限制,目录保护,header头信息,cookie,查询字符串操作。
在服务器根目录中,目录树中的每个级别或目录都可以具有自己的.httaccess文件,并具有自己的配置。
对于共享主机提供商,这是一个梦想,因为他们可以在同一台计算机上为数百个用户提供一种配置其网站服务方式的方式,而不会影响其他网站。客户可以在受限的共享托管环境中配置许多详细信息,而无需接触全局服务器配置。
但是,这种灵活性是以性能为代价的:“无论您实际上是否使用它们,允许.htaccess文件都会导致性能下降!”
每次启用.htaccess文件时,Apache都必须从请求的URL或文件中遍历整个目录树,直到所有的更高级别,直到服务器的根目录,然后针对每个请求加载它们。
apache还有一个受欢迎的点是他的模块机制。
Apache便允许用户安装模块,然后根据需要启用/禁用它们。
apahce有很多好用的模块,比如压缩,加密,日志记录,重定向到更高级的内容,例如使用高级语法编辑请求和响应,正是有了这些模块,才让Apache处理请求更加多样化。
nginxNginx(也称为nginx或NGINX)是在2004年由俄罗斯开发人员Igor Sysoev首次公开发行的。
Nginx是专门为解决Apache Web服务器的性能限制而编写的。
Nginx发布后,主要用于提供静态文件,并在Apache安装之前用作负载平衡器或反向代理。 随着网络的发展以及对速度和硬件使用效率的高要求,越来越多的网站开始使用Nginx完全替换Apache,这也要归功于更成熟的软件。
现在市场上nginx的份额已经超过了Apache,很多大公司都开始采用nginx作为后端的web服务器,有些大公司甚至会修改nginx的部分代码来使用,比如我们熟知的Tengine。
nginx最初设计的时候就是模块化的思想,它的所有功能都是采用模块形式提供的,需要什么功能,只要对应加载相应的模块就可以。
nginx一直都在全速发展着,目前最新的web技术quic和http3也已经在最新版的nginx中提供实现了。
缓存apahce和nginx都提供了缓存功能。apache有mod_cache模块,nginx也有fastcgi缓存。可以说没有缓存的web系统几乎不可能支撑如今高访问的情况。当然,说道缓存,最专业的还是Varnish HTTP。不过因为nginx可以和它完美地结合,所以这也是越来越多人拥抱nginx的一个理由。
apache和nginx处理请求方式apache和nginx最大的不同在于它们处理请求的方式。
apache使用mpm(Multi-Processing-Modules)处理请求。
早期的mpm是prefork模块。在这种模式下,Apache会在每个请求中生成一个线程的新进程。该模块与mod_php一起使用,意味着Apache服务器在每个进程中都嵌入了一个PHP解释器,虽然可能这个请求只是请求css等静态文件。这是非常低效的。
在后来的几年中,Apache开发了多线程工作程序mpm,之后又开发了事件mpm。它们都减轻了许多Apache的性能问题。切换到php-fpm使得Apache仍然可以成为当今竞争性的解决方案,并且消除了.htaccess的使用,这让apache的处理效率提升了很多。
Nginx使用异步,非阻塞事件来处理请求。
简而言之,Apache对每个连接都使用进程(对于worker mpm,它使用线程)。随着流量的增加,它很快变得太昂贵了。
事件mpm在优化方面更进一步,但是一些测试表明它不能超过Nginx。尤其是当我们谈论静态文件时,Nginx的服务量是Apache的两倍。
Nginx理想情况下,每个CPU /内核只有一个工作进程。 Nginx工作进程的区别在于,每个工作进程可以处理每个工作进程成千上万的传入网络连接。无需为每个连接创建新的线程或进程。
总结从目前的的发展眼光来看,nginx却是比apache的性能更优越,而且有越来越多的辅助插件构建在nginx上面,所以,如果你的web项目刚起步,建议您选择nginx来作为服务器,它可以给你提供更优秀的性能体验,当然,对于中小型项目来说,apahce依然也是不错的选择。特别是他的.htaccess确实非常好用。
ApacheNginxLighttpdproxy代理非常好非常好一般rewriter好非常好一般fcgi不好好非常好热部署不支持支持不支持系统压力比较很大很小比较小稳定性好非常好不好安全性好一般一般技术支持非常好很少一般静态文件处理一般非常好好vhosts支持不支持支持反向代理一般非常好一般session sticky支持不支持不支持
注:在相对比较大的网站,节约下来的服务器成本无疑是客观的。而有些小型网站往往服务器不多,如果采用 Apache 这类传统 Web 服务器,似乎也还能撑过去。但有其很明显的弊端:Apache 在处理流量爆发的时候(比如爬虫或者是 Digg 效应) 很容易过载,这样的情况下采用 Nginx 最为合适。
建议方案:
Apache 后台服务器(主要处理php及一些功能请求 如:中文url)
Nginx 前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求)
Lighttpd 图片服务器
总体来说,随着nginx功能得完善将使他成为今后web server得主流。
大网站一般都几个一起用, 前边放的nginx, 后边放在lighttpd, 从上面的性能表就看得出,而apache比较综合性, 建中小网站比较合适, 功能强大, 应用广泛。