目前,Nginx为15%的网站提供服务,既有CloudFlare、Parse之类的初创公司,也有Automattic 、Netflix之类的网络巨头。
图为Nginx创始人西索夫
据美国《连线》杂志报道,十年多前,一个名不见经传的开源Web服务器软件诞生;十多年后的今天,它的影响力可以同Apache匹敌,吸引全世界一大批网络巨头的加入。他就是俄罗斯的Nginx。
那是2008年,Automattic打算替换用于支持WordPress服务的Web服务器软件,事情并没那么顺利。
这家公司为了坚持一贯的开源策略,决心要把WordPress搬移至Web服务器,而世界知名的Apache无疑是首先。但工程师尝试后发现,Apache会崩溃,特别是WordPress异常繁忙的时候。
“我们认识到它在大流量的情况下是非常不稳定的,”负责这项任务的巴瑞·亚伯拉罕森(Barry Abrahamson)说。
因此Automattic停止向Apache过渡,而是冒险采纳当时不太知名的开源项目Nginx。5年后,WordPress仍然在Nginx上运行,其他公司也纷纷效仿。
在全球最知名的Web服务器正丢失市场份额的时代,Nginx的市场份额却因其朴实无华的运营理念和同时处理多种网络链接的技巧而不断增长。Apache依然是所有Web服务器的王者,但是Nginx的使用数量却在过去两年翻了一番。
目前,它为15%的网站提供服务,既有CloudFlare、Parse之类的初创公司,也有Automattic 、Netflix之类的网络巨头。“我们在Nginx上使用尽可能多的软件栈。”亚伯拉罕森说。
从任何方面来说,这不像是一个成功的故事,但它却显现了开源软件的全球影响力。
Nginx 由俄罗斯工程师伊戈尔·西索夫(Igor Sysoev)创建,这位42岁的工程师2002年开启项目,第一版的公共代码于同年10月上线。
像其他开源项目领导者一样,他希望项目能满足自己的需求。当时,他服务于俄罗斯快速增长的门口网站Rambler。因此,他需要一个比现有开源服务器能处理更多流量的服务器。
在Nginx研发过程中,他利用Rambler测试其代码。但它的第一个真正用户是MP3下载网站Zvuki,接着是一个在线约会网站,然后还有Rambler下属的照片分享站点。
截至2005年,Nginx的用户数量接近100,但来自英语国家的用户很难理解这款软件,因为大多数文件和讨论贴都是俄语版。不过2006年,英语用户开始在Nginx的讨论区发帖子;美国和其他国家的俄语用户也在宣传该项目,他们不仅在博客中分享配置文件,而且将复杂的俄语技术文件翻译成其他用户能够理解的格式。
当YouTube和Facebook开始崛起时,Nginx还保持不温不火的状态,但他定位于下一代的网络公司。几年后,Automattic和CloudFlare也加入它的用户行列。
2009年,CloudFlare创建公司,提供屏蔽网络袭击、增强网站性能相关的服务。它需要的Web服务器软件必须能运行在多核处理器设备中。
CloudFlare联合创始人兼首席执行官马修·普林斯(Matthew Prince)表示,Nginx在多核多处理器设备中表现良好,它能与很多Web客户端连接,而又不占用很大的计算机内存。
如果不能检查源代码,他们还会选择不知名的俄罗斯软件吗?“没门儿,”普林斯说,“如果它不是开源的,我们根本不信任。”
CloudFlare为西索夫提供了一个职位,并把公司赌注在这一项目上。如今,CloudFlare每月利用Nginx响应1万亿次的网络需求。“科技界比较好的地方在于,好的技术最终会浮现出来,”普林斯说,“你可以阅读源代码,并修正。”
今天,Nginx在CloudFlare之类的创业公司中很受欢迎。据统计,使用亚马逊云计算服务的1200万网站中,40%的网站都使用Nginx的服务。而且Nginx的业务增长大多以蚕食Apache的市场为代价。
西索夫满足的是一种真正的需求。“他解决的问题非常普遍。这根本不是俄罗斯人的专属问题。”Nginx公司联合创始人安德鲁·阿列克塞(Andrew Alexeev )表示,“越来越多的业务向在线服务过度,那就意味着每个服务器承担的用户数量更多,而且具备更复杂的结构。”
Automattic2008年转换到新平台后,创始人马特·穆伦维格(Matt Mullenweg) 向西索夫捐赠3500美元。“我想知道能帮点什么忙,”他写道,“他做得很不错。”
也就是这个时候,西索夫知道他遇到最大的时机。“这是我最大的一笔捐赠。”他回忆说。
两年前,他辞去了在Rambler的工作。如今他是一家新公司的首席技术管,主要向企业用户推销高效率版的Nginx。上个月,这家公司上线首个商业产品:NginxPlus。经过10年的研发,有了1亿网站的支持,西索夫最终准备好大赚特赚了。
引用来自“eechen”的评论
对于PHP而言,Nginx还有一个强劲的fastcgi_cache功能:
chrome -> nginx(fastcgi_cache) -> php-fpm(memcache) -> mysql
fastcgi_cache的作用是缓存fastcgi生成的内容,很多情况是php生成的动态的内容。
fastcgi_cache缓存减少了nginx与php的通信的次数,更减轻了php和数据库(mysql)的压力,
fastcgi_cache可以设置缓存过期时间,比如200页面1小时后过期:fastcgi_cache_valid 200 1h;
配置fastcgi_cache重启服务后多出一个cache manager process(缓存管理进程)
清除缓存:
1.等待缓存自行过期.
2.写PHP脚本通过编程删除.
3.使用第三方模块ngx_cache_purge删除缓存.
4.手动删除.
header中有Pragma:no-cache则Nginx不会缓存这些页面.
< header中有Pragma:no-cache则Nginx不会缓存这些页面.
---
> header中有Cache-Control: no-cache则Nginx不会缓存这些页面.
<?php
header("Cache-Control: no-cache, must-revalidate, max-age=0"); //HTTP 1.1
header("Pragma: no-cache"); //HTTP 1.0
?>
引用来自“中国孙悟空”的评论
国内怎么没有能出现这样的基础性软件,唉
确实如此。就算有,也很少会开源的。
孙悟空威客网,全球领先创意服务平台,震撼中国所有设计行业,"没有做不到,只有想不到","啥人才都有,啥都可以做",分享个页面:http://www.swkweike.com/index.php?do=prom&u=5675&p=reg
chrome -> nginx(fastcgi_cache) -> php-fpm(memcache) -> mysql
fastcgi_cache的作用是缓存fastcgi生成的内容,很多情况是php生成的动态的内容。
fastcgi_cache缓存减少了nginx与php的通信的次数,更减轻了php和数据库(mysql)的压力,
fastcgi_cache可以设置缓存过期时间,比如200页面1小时后过期:fastcgi_cache_valid 200 1h;
配置fastcgi_cache重启服务后多出一个cache manager process(缓存管理进程)
清除缓存:
1.等待缓存自行过期.
2.写PHP脚本通过编程删除.
3.使用第三方模块ngx_cache_purge删除缓存.
4.手动删除.
header中有Pragma:no-cache则Nginx不会缓存这些页面.
Nginx还支持将某一个工人进程绑定在某一个核上(cpu亲缘性绑定),这样就不会因为进程的切换带来cache的失效,所以推荐设置cpu有几个核就设置几个worker进程.
但注意,更多的worker进程,只会导致进程来竞争cpu资源了,从而带来不必要的上下文切换,所以worker进程不是越多越好.
详细参见: http://tengine.taobao.org/book/chapter_02.html
比如对于一台四核CPU的服务器,可以把Nginx的两个工人进程绑定到CPU2和CPU3.
四核:0001表示CPU0,0010表示CPU1,0100表示CPU2,1000表示CPU4.
因为系统会优先使用第一个CPU,所以把Nginx绑定到最后两个CPU.
worker_processes 2;
worker_cpu_affinity 1000 0100;
Nginx还可以轻松实现PHP分布式服务,前端放一台强劲的Nginx服务器,PHP动态请求则fastcgi_pass到upstream后端的PHP-FPM集群:
upstream example.com.backend {
#ip_hash; #根据来源IP和后端配置来做hash分配,确保固定IP只访问一个后端
server 192.168.0.1:9000 weight=2; #weight默认为1,值越大,这台server负载的权重就越大
server 192.168.0.2:9000 down; #down表示此台server暂时不参与负载
server 192.168.0.3:9000;
server 192.168.0.4:9000 backup; #当其他非backup服务器down或者busy的时候,请求backup机器,属于应急措施,不能和ip_hash一起使用
}
server{
location ~ \.php$ {
...
fastcgi_pass example.com.backend;
...
}
}
引用来自“Chriesh”的评论
引用来自“水人”的评论
引用来自“明月惊鹊”的评论
nginx果然强大。老衲用了它来做rtmp流媒体服务器,从github上下载了nginx-rtmp-module,内存、cpu使用率都远远优于red5和fms。
这里是插件的源码。
不过,你们先熟悉rtmp吧。