高性能web服务器nginx及相关新技术的应用实践_sd2c2009.ppt
高性能Web服务器Nginx 及相关新技术的应用实践,北京金山软件 逍遥网 张宴 2009.10,什么是Nginx,Nginx “engine x” 是俄罗斯人Igor Sysoev塞索耶夫编写的一款高性能的 HTTP 和反向代理服务器。 Nginx 已经在俄罗斯最大的门户网站── Rambler Media(www.rambler.ru)上运行了4年时间,同时俄罗斯超过20的虚拟主机平台采用Nginx作为反向代理服务器。 在国内,已经有新浪博客、新浪播客、搜狐通行证、网易新闻、网易博客、金山逍遥网、金山爱词霸、校内网、YUPOO相册、豆瓣、迅雷看看等多家网站、频道使用 Nginx 服务器。,Nginx的优点①,1、高并发连接官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。 2、内存消耗少在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10150M)。 3、配置文件非常简单风格跟程序一样通俗易懂。 4、成本低廉Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币。,Nginx的优点②,5、支持Rewrite重写规则能够根据域名、URL的不同,将 HTTP 请求分到不同的后端服务器群组。 6、内置的健康检查功能如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。 7、节省带宽支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。 8、稳定性高用于反向代理,宕机的概率微乎其微。,单台Nginx支撑了高达2.8万的活动并发连接数,2009-09-03 1430,金山游戏剑侠情缘网络版3临时维护1小时,大量玩家上官网,论坛、评论、客服等动态应用Nginx服务器集群,每台服务器的Nginx活动连接数达到2.8万,这是本人遇到的Nginx生产环境最高并发值。,Nginx的主要应用类别,1、使用 Nginx 结合FastCGI运行 PHP、JSP 、Perl等程序 2、使用 Nginx 作反向代理、负载均衡、规则过滤 3、使用 Nginx 运行静态HTML页、图片 4、Nginx与其他新技术的结合应用,Nginx在金山逍遥网中的应用案例,金山逍遥网是金山游戏官方网站,为金山软件旗下的各款游戏提供新闻资讯、客户服务、在线充值、视听互动、在线活动、博客、相册、论坛、玩家社区等内容建设和在线服务支持。,金山逍遥网 Nginx七层负载均衡的应用,,Nginx承担每个机房Web负载均衡服务,简单的Nginx负载均衡配置①, upstream bbs_server_pool { server 192.168.1.1580 weight1 max_fails2 fail_timeout30s; server 192.168.1.1680 weight1 max_fails2 fail_timeout30s; server 192.168.1.1780 weight1 max_fails2 fail_timeout30s; server 192.168.1.1880 weight1 max_fails2 fail_timeout30s; } 在nginx.conf配置文件中,用upstream指令定义一组反向代理/负载均衡后端服务器池。,简单的Nginx负载均衡配置②, server{ listen80; server_name *; location / { proxy_pass http//bbs_server_pool; 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_addr; 如果后端Web服务器上的程序需要获取用户IP,请从该Header头获取。,Nginx负载均衡的双机热备,,通常情况下的负载均衡HA高可用,优点实现了双机热备、故障自动转移。 缺点备机服务器处于闲置状态,浪费了硬件资源。,逍遥网Nginx负载均衡双机互备,正常情况下,两台Nginx负载均衡服务器全部处于活动状态,对外提供服务。,服务器①绑定IP别名,/sbin/ifconfig eth0ha1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up /sbin/route add -host 61.1.1.2 dev eth0ha1 /sbin/arping -I eth0 -c 3 -s 61.1.1.2 61.1.1.1 在服务器①的外网网卡eth0上,绑定了一个虚拟IP 61.1.1.2,绑定完成后发送arping包给网关。,服务器②绑定IP别名,/sbin/ifconfig eth0ha2 61.1.1.3 broadcast 61.1.1.255 netmask 255.255.255.0 up /sbin/route add -host 61.1.1.3 dev eth0ha2 /sbin/arping -I eth0 -c 3 -s 61.1.1.3 61.1.1.1 在服务器②的外网网卡eth0上,绑定了一个虚拟IP 61.1.1.3,绑定完成后发送arping包给网关。,,新的Nginx双机互备发生故障时,自动接管公网虚拟IP,实现故障转移,服务器①去除IP别名,/sbin/ifconfig eth0ha1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 down 通过两台服务器之间的互相检测机制,当服务器①上的检测程序发现自身的Nginx无法访问时,停止绑定虚拟IP 61.1.1.2,服务器②接管原服务器①的虚拟IP,/sbin/ifconfig eth0ha1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up /sbin/route add -host 61.1.1.2 dev eth0ha1 /sbin/arping -I eth0 -c 3 -s 61.1.1.2 61.1.1.1 给网关发送Arping包,保证了网关上IP、MAC地址对应关系能够马上更改,能够做到强行接管虚拟IP。,