高性能Web服务器nginx及相关新技术的应用实践S

上传人:hao****an 文档编号:252961428 上传时间:2024-11-26 格式:PPT 页数:53 大小:659.50KB
收藏 版权申诉 举报 下载
高性能Web服务器nginx及相关新技术的应用实践S_第1页
第1页 / 共53页
高性能Web服务器nginx及相关新技术的应用实践S_第2页
第2页 / 共53页
高性能Web服务器nginx及相关新技术的应用实践S_第3页
第3页 / 共53页
资源描述:

《高性能Web服务器nginx及相关新技术的应用实践S》由会员分享,可在线阅读,更多相关《高性能Web服务器nginx及相关新技术的应用实践S(53页珍藏版)》请在装配图网上搜索。

1、单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,*,,*,高性能,Web,服务器,Nginx,及相关新技术的应用实践,,北京金山软件 逍遥网,,张宴,,2009.10,什么是,Nginx,?,Nginx (“engine x”),是俄罗斯人,Igor Sysoev(,塞索耶夫,),编写的一款高性能的,HTTP,和反向代理服务器。,,,Nginx,已经在俄罗斯最大的门户网站──,Rambler Media,()上运行了,4,年时间,同时俄罗斯超过,20%

2、,的虚拟主机平台采用,Nginx,作为反向代理服务器。,,,在国内,已经有新浪博客、新浪播客、搜狐通行证、网易新闻、网易博客、金山逍遥网、金山爱词霸、校内网、,YUPOO,相册、豆瓣、迅雷看看等多家网站、频道使用,Nginx,服务器。,,Nginx,的优点①,1,、高并发连接:,官方测试能够支撑,5,万并发连接,在实际生产环境中跑到,2,~,3,万并发连接数。,,2,、内存消耗少:,在,3,万并发连接下,开启的,10,个,Nginx,进程才消耗,150M,内存(,15M*10=150M,)。,,3,、配置文件非常简单:,风格跟程序一样通俗易懂。,,4,、成本低廉:,Nginx,为开源软件,可以

3、免费使用。而购买,F5 BIG-IP,、,NetScaler,等硬件负载均衡交换机则需要十多万至几十万人民币。,,Nginx,的优点②,5,、支持,Rewrite,重写规则:,能够根据域名、,URL,的不同,将,HTTP,请求分到不同的后端服务器群组。,,6,、内置的健康检查功能:,如果,Nginx Proxy,后端的某台,Web,服务器宕机了,不会影响前端访问。,,7,、节省带宽:,支持,GZIP,压缩,可以添加浏览器本地缓存的,Header,头。,,8,、稳定性高:,用于反向代理,宕机的概率微乎其微。,,单台,Nginx,支撑了高达,2.8,万的活动并发连接数,2009-09-03,,14

4、:30,,金山游戏,《,剑侠情缘网络版,3》,临时维护,1,小时,大量玩家上官网,论坛、评论、客服等动态应用,Nginx,服务器集群,每台服务器的,Nginx,活动连接数达到,2.8,万,这是本人遇到的,Nginx,生产环境最高并发值。,Nginx,的主要应用类别,1,、使用,Nginx,结合,FastCGI,运行,PHP,、,JSP,、,Perl,等程序,,,2,、使用,Nginx,作反向代理、负载均衡、规则过滤,,,3,、使用,Nginx,运行静态,HTML,页、图片,,,4,、,Nginx,与其他新技术的结合应用,Nginx,在金山逍遥网中的应用案例,金山逍遥网,(),是金山游戏官方网站

5、,为金山软件旗下的各款游戏提供新闻资讯、客户服务、在线充值、视听互动、在线活动、博客、相册、论坛、玩家社区等内容建设和在线服务支持。,金山逍遥网,Nginx,七层负载均衡的应用,,Nginx,承担每个机房,Web,负载均衡服务,简单的,Nginx,负载均衡配置①,……,,upstream bbs_server_pool {,,server 192.168.1.15:80 weight=1 max_fails=2 fail_timeout=30s;,,server 192.168.1.16:80 weight=1 max_fails=2 fail_timeout=30s;,,server

6、 192.168.1.17:80 weight=1 max_fails=2 fail_timeout=30s;,,server 192.168.1.18:80 weight=1 max_fails=2 fail_timeout=30s;,,},,……,,,在,nginx.conf,配置文件中,用,upstream,指令定义一组反向代理,/,负载均衡后端服务器池。,,简单的,Nginx,负载均衡配置②,……,,server{,,listen 80;,,server_name *;,,location /,,{,,proxy_pass http://bbs_server_pool;,,

7、proxy_set_header Host $host;,,proxy_set_header X-Forwarded-For $remote_addr;,,},,access_log off;,,},,……,简单的,Nginx,负载均衡配置③,proxy_pass http://bbs_server_pool;,用于指定反向代理的服务器池。,,,proxy_set_header Host $host;,当后端,Web,服务器上也配置有多个虚拟主机时,需要用该,Header,来区分反向代理哪个主机名。,,proxy_set_header X-Forwarded-For $remote_a

8、ddr;,如果后端,Web,服务器上的程序需要获取用户,IP,,请从该,Header,头获取。,Nginx,负载均衡的双机热备,,通常情况下的负载均衡,HA,高可用,优点:实现了双机热备、故障自动转移。,,缺点:备机服务器处于闲置状态,浪费了硬件资源。,逍遥网,Nginx,负载均衡双机互备,正常情况下,两台,Nginx,负载均衡服务器全部处于活动状态,对外提供服务。,服务器①绑定,IP,别名,/sbin/ifconfig eth0:ha1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up,,/sbin/route add -host

9、61.1.1.2 dev eth0:ha1,,,,在服务器①的外网网卡,eth0,上,绑定了一个虚拟,绑定完成后发送,arping,包给网关。,服务器②绑定,IP,别名,/sbin/ifconfig eth0:ha2 61.1.1.3 broadcast 61.1.1.255 netmask 255.255.255.0 up,,/sbin/route add -host 61.1.1.3 dev eth0:ha2,,,,在服务器②的外网网卡,eth0,上,绑定了一个虚拟,绑定完成后发送,arping,包给网关。,,新的,Nginx,双机互备,(,发生故障时,),自动接管公网虚拟,IP,,实现故

10、障转移,服务器①去除,IP,别名,/sbin/ifconfig eth0:ha1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 down,,,通过两台服务器之间的互相检测机制,当服务器①上的检测程序发现自身的,Nginx,无法访问时,停止绑定虚拟,服务器②接管原服务器①的虚拟,IP,/sbin/ifconfig eth0:ha1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up,,/sbin/route add -host 61.1.1.2 dev eth0:ha1,,,,给网

11、关发送,Arping,包,保证了网关上,IP,、,MAC,地址对应关系能够马上更改,能够做到强行接管虚拟,IP,。,Nginx,负载均衡,URL,分发,,,硬件、软件,,七层负载均衡对比:,,NetScaler,,与,,Nginx,,,硬件、软件,,七层负载均衡对比:,,NetScaler,,与,,Nginx,根据不同的,URL,转发到不同服务器,server{,,listen 80;,,server_name ;,,,location ~ ^/admincp.php,,{,,proxy_pass http://192.168.1.11;,,proxy_set_header Ho

12、st $host;,,proxy_set_header X-Forwarded-For $remote_addr;,,},,,location /,,{,,proxy_pass http://php_server_pool;,,proxy_set_header Host $host;,,proxy_set_header X-Forwarded-For $remote_addr;,,},,},Web,相关文件的实时自动同步,,少量文件的多服务器自动同步,使用,Linux 2.6,内核的,inotify,监控,Linux,文件系统事件。,,利用开源的,lsync,监听某一目录,如果目录内文

13、件发生增、删、改,利用,Rsync,协议自动同步到多台服务器。,,lsyncd /data0/htdocs/ 192.168.5.1::hu_data/ 192.168.5.2::hu_data/ 192.168.5.3::hu_data/ 192.168.5.4::hu_data/,大量文件的多服务器自动同步,使用,Linux 2.6,内核的,inotify,监控,Linux,文件系统事件。,,修改可监控的最大目录数量,,echo 50000000 > /proc/sys/fs/inotify/max_user_watches,,金山逍遥网开发的,sersync,文件自动同步程序,适合大量文

14、件的自动同步,并可以在文件同步完成后,自动调用,CDN,缓存刷新接口,刷新发生修改、删除的文件的访问,URL,。,,用于:金山游戏官网的,CMS,发布系统。,Nginx,的,Web,缓存服务,,Nginx,的缓存功能,Nginx,从版本开始,支持了类似,Squid,的缓存功能;,,缓存把,URL,及相关组合当作,Key,,用,md5,编码哈希后保存;,,Nginx,的,Web,缓存服务只能为指定,URL,或状态码设置过期时间,不支持类似,Squid,的,PURGE,指令,手动清除指定缓存页面;,,采用,MMAP,实现,设置的缓存区大小不能超过物理内存,+SWAP,的值。,,反向代理中的,Ngi

15、nx.conf,缓存配置①,……,,#,设置,Web,缓存区名称为,cache_one,,缓存空间大小为,2000MB,,,1,天清理一次缓存,单个文件超过,5m,不缓存。,,proxy_cache_path /data0/proxy_cache_path levels=1:2 keys_zone=cache_one:2000m inactive=1d max_size=5m;,,,#,注:,proxy_temp_path,和,proxy_cache_path,指定的路径必须在同一分区,,proxy_temp_path /data0/proxy_temp_path;,,,upstrea

16、m my_server_pool {,,server 192.168.1.2:80 weight=1 max_fails=2 fail_timeout=30s;,,server 192.168.1.3:80 weight=1 max_fails=2 fail_timeout=30s;,,},,……,,反向代理中的,Nginx.conf,缓存配置②,server,,{,,listen 80;,,server_name ;,,location /,,{,,proxy_set_header Host $host;,,proxy_set_header X-Forwarded-F

17、or $remote_addr;,,proxy_pass http://my_server_pool;,,},,location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$,,{,,#,对图片、,JS,、,CSS,进行缓存,使用,Web,缓存区,cache_one,,proxy_cache cache_one;,,,反向代理中的,Nginx.conf,缓存配置③,,#,对不同,HTTP,状态码缓存设置不同的缓存时间,,,proxy_cache_valid 200 10m;,,proxy_cache_valid 304 3m;,,proxy_cache

18、_valid 301 302 1h;,,proxy_cache_valid any 1m;,,,,#,设置,Web,缓存的,Key,值,,Nginx,根据,Key,值,md5,哈希存储缓存,这里根据“域名、,URI,、客户端请求,Header,头中的,If-Modified-Since,信息”组合成,Key,。,,,proxy_cache_key $host$request_uri$http_if_modified_since;,,,,#,反向代理,访问后端内容源服务器,,,proxy_set_header Host $host;,,proxy_set_header X-Forwarde

19、d-For $remote_addr;,,proxy_pass http://my_server_pool;,,},,access_log off;,,},Nginx,缓存功能的优点,对于修改实时性要求不高的图片、,Flash,、,CSS,样式文件、,JavaScript,文件,可以在,Nginx,反向代理,(,负载均衡,),服务器上设置缓存,不用每次请求都转发到后端,Web,服务器,加快了响应速度。,,减少了,Nginx,与后端,Web,服务器的连接数,提高了,Nginx,处理性能。,Nginx,的,Rewrite,重写规则,,Nginx Rewrite,规则相关指令,Nginx Rew

20、rite,规则相关指令有,if,、,rewrite,、,set,、,return,、,break,等,其中,rewrite,是最关键的指令。一个简单的,Nginx Rewrite,规则语法如下:,,rewrite ^/b/(.*)\.html /play.php?video=$1 break;,,,如果加上,if,语句,示例如下:,,if (!-f $request_filename),,{,,rewrite ^/img/(.*)$ /site/$host/images/$1 last;,,},,Nginx,与,Apache,的,Rewrite,规则实例对比①,简单的,Nginx,和,Ap

21、ache,重写规则区别不大,基本上能够完全兼容。例如:,,Apache Rewrite,规则:,,RewriteRule ^/(mianshi|xianjing)/$ /zl/index.php?name=$1 [L],,RewriteRule ^/ceshi/$ /zl/ceshi.php [L],,RewriteRule ^/(mianshi)_([a-zA-Z]+)/$ /zl/index.php?name=$1_$2 [L],,RewriteRule ^/pingce([0-9]*)/$ /zl/pingce.php?id=$1 [L],,,Nginx Rewrite,规则:,

22、,rewrite ^/(mianshi|xianjing)/$ /zl/index.php?name=$1 last;,,rewrite ^/ceshi/$ /zl/ceshi.php last;,,rewrite ^/(mianshi)_([a-zA-Z]+)/$ /zl/index.php?name=$1_$2 last;,,rewrite ^/pingce([0-9]*)/$ /zl/pingce.php?id=$1 last;,,,由以上示例可以看出,,Apache,的,Rewrite,规则改为,Nginx,的,Rewrite,规则,其实很简单:,Apache,的,Rewrit

23、eRule,指令换成,Nginx,的,rewrite,指令,,Apache,的,[L],标记换成,Nginx,的,last,标记,中间的内容不变。,,Nginx,与,Apache,的,Rewrite,规则实例对比②,如果,Apache,的,Rewrite,规则改为,Nginx,的,Rewrite,规则后,使用,nginx -t,命令检查发现,nginx.conf,配置文件有语法错误,那么可以尝试给条件加上引号。例如一下的,Nginx Rewrite,规则会报语法错误:,,,rewrite ^/([0-9]{5}).html$ /x.jsp?id=$1 last;,,,加上引号就正确了:,,

24、rewrite "^/([0-9]{5}).html$" /x.jsp?id=$1 last;,,Nginx,与,Apache,的,Rewrite,规则实例对比③,Apache,与,Nginx,的,Rewrite,规则在,URL,跳转时有细微的区别:,,,Apache Rewrite,规则:,,RewriteRule ^/html/tagindex/([a-zA-Z]+)/.*$ /$1/ [R=301,L],,,Nginx Rewrite,规则:,,rewrite ^/html/tagindex/([a-zA-Z]+)/.*$ http://$host/$1/ permanent;

25、,,,以上示例中,我们注意到,,Nginx Rewrite,规则的置换串中增加了“,http://$host”,,这是在,Nginx,中要求的。,,Nginx,与,Apache,的,Rewrite,规则实例对比④,另外,,Apache,与,Nginx,的,Rewrite,规则在变量名称方面也有区别,例如:,,,Apache Rewrite,规则:,,RewriteRule ^/user/login/$ /user/login.php?login=1&forward=http://%{HTTP_HOST} [L],,,Nginx Rewrite,规则:,,rewrite ^/user/lo

26、gin/$ /user/login.php?login=1,,Nginx,与,Apache,的,Rewrite,规则实例对比⑤,Apache,与,Nginx Rewrite,规则的一些功能相同或类似的指令、标记对应关系:,,,Apache,的,RewriteCond,指令对应,Nginx,的,if,指令;,,Apache,的,RewriteRule,指令对应,Nginx,的,rewrite,指令;,,Apache,的,[R],标记对应,Nginx,的,redirect,标记;,,Apache,的,[P],标记对应,Nginx,的,last,标记;,,Apache,的,[R,L],标记对应,Ng

27、inx,的,redirect,标记;,,Apache,的,[P,L],标记对应,Nginx,的,last,标记;,,Apache,的,[PT,L],标记对应,Nginx,的,last,标记;,,Nginx,与,Apache,的多条件,Rewrite,示例①,允许指定的域名访问本站,其他域名一律跳转到,,,Apache Rewrite,规则:,,RewriteCond %{HTTP_HOST} ^(.*?)\.domain\.com$,,RewriteCond %{HTTP_HOST} !^qita\.domain\.com$,,RewriteCond %{DOCUMENT_ROOT

28、}/market/%1/index.htm -f,,RewriteRule ^/wu/$ /market/%1/index.htm [L],,,Nginx,的,if,指令不支持嵌套,也不支持,AND,、,OR,等多条件匹配,相比于,Apache,的,RewriteCond,,显得麻烦一些,但是,我们可以通过,下一页,的,Nginx,配置写法来实现这个示例:,Nginx,与,Apache,的多条件,Rewrite,示例②,Nginx Rewrite,规则:,,if ($host ~* ^(.*?)\.domain\.com$),,{,,set $var_wupin_city $1;,,set $

29、var_wupin '1';,,},,if ($host ~* ^qita\.domain\.com$),,{,,set $var_wupin '0';,,},,if (!-f $document_root/market/$var_wupin_city/index.htm),,{,,set $var_wupin '0';,,},,if ($var_wupin ~ '1'),,{,,rewrite ^/wu/$ /market/$var_wupin_city/index.htm last;,,},Nginx,与金山逍遥,TCSQL,的配合,,一般数据库的缓存类型,一般数据库缓存分为四种:,,1,

30、、,Key/Value,单个对象缓存,,,如,Memcached,,2,、,列表缓存,,,就像论坛里帖子的列表,,3,、,记录条数的缓存,,,比如一个论坛板块里有多少个帖子,这样才方便实现分页。,,4,、,复杂一点的,group,,,sum,,,count,查询,,,比如一个论坛里按点击数排名的最,HOT,的帖子列表。,,第一种比较好实现,后面三种比较麻烦。,什么是,TCSQL,实时列表缓存数据库?,TCSQL,是金山逍遥网技术支持部平台组以,Tokyo Cabinet DBM,为底层存储与索引,结合类似,Memcached,的,Key-Value,内存对象缓存,借鉴,SQL,语句的,SELE

31、CT,、,INSERT,、,UPDATE,、,DELETE,思想与功能开发的实时列表缓存数据库,可实现对,列表页数据,、,记录条数,的实时缓存。,,TCSQL,采用,HTTP GET/POST,协议+,JSON,数据交换格式在客户端、服务器端之间进行数据交互。,,利用我们编写的,MySQL UDF,扩展,+,触发器,我们可以在,MySQL,的某张表发生插入、更新、删除操作时,自动将数据同步到,TCSQL,数据库,使得,TCSQL,可以当,MySQL,从库一样使用。,,TCSQL,的查询速度,TCSQL,在,10000,并发连接情况下的查询速度(服务器为浪潮,NF190,服务器,两颗双核,Xeo

32、n(TM) CPU 2.80GHz,、,4GB,内存、,1,万转,SCSI,硬盘。):,,主键查询并取出倒序第,1,条记录(“,=”,运算):,12155,次请求,/,秒,,其他索引键查询并取出倒序第,1,条记录(“,=”,运算):,11897,次请求,/,秒,,,TCSQL,的查询速度,根据复合条件查询并取出倒序前,10,条记录:,8778,次请求,/,秒,(相当于,SELECT * FROM table WHERE dateline >=,随机时间戳,AND idtype = ',变换的文本,' ORDER BY pkey DESC LIMIT 0,10,),,统计符合查询条件的记录数量:

33、,9160,次请求,/,秒,(相当于,SELECT count(*) FROM table WHERE dateline >=,随机时间戳,AND idtype = ',变换的文本,',),找出瓶颈,浏览器端,--,查询,-->,服务器端,Nginx + PHP + TCSQL,,Nginx 4000~13000,请求数,/,秒,,PHP 500~1500,请求数,/,秒,,TCSQL 5000~15000,请求数,/,秒,,,位于中间的,PHP(FastCGI),不在一个量级上,成为列表页查询请求的最大瓶颈。,,,抛弃制约性能的,PHP,中间层,浏览器端,JavaScript,,--,查询,-->,服务器端,Nginx(rewrite,重写规则、,proxy_pass,反向代理,) + TCSQL,,抛弃了中间制约整体性能的,PHP,层。,,运行于浏览器端的,JavaScript,代码通过,Nginx,直接查询,TCSQL,数据库,取得数据并在网页显示。,,利用,Nginx,的,rewrite,重写规则控制对,TCSQL,的访问权限。,谢谢!,,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  sobing.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!