目录
Nginx简介
Nginx(发音同engine x) 是一款轻量级的web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris以及Microsoft Windows等操作系统中运行。
Nginx由俄国的程序设计师lgor Sysoev所开发,最初供俄国大型的入口网站及搜索引擎Rambler(俄文Pam6πep)使用。其特点是占有内存少,并发能力强(用于解决C10k问题),事实上Nginx的并发能力确实在同类型的网页服务器上表现较好。
Nginx作为一款强大的Web服务器软件,具有高性能、高并发和低内存占用的特点。此外,它也能提供强大的反向代理功能。俄罗斯大约有超过20%的虚拟主机采用Ngnix作为反向代理服务器。在国内也有阿里、腾讯、新浪、网易等多家网址在使用Ngnix作为反向代理服务器。据Netcraft统计,世界上最繁忙的网站中,有11.48%使用Ngnix作为其服务器或者代理服务器。
基于反向代理的代理的功能,Nginx作为负载均衡的理由:
高并发连接
内存消耗少
配置文件非常简单
成本低廉
支持Rewrite重写规则
内置的健康检查功能
节省带宽
稳定性高
高并发连接:
NGINX结合采用多进程和IO多路复用的结构处理并发客户请求。非常高效的处理
官方测试能够支撑C50k并发连接,在实际生产环境中可以跑到2-3万并发连接网络请求
内存消耗少:
1、Ngnix设计了大量的自带的数据结构,比如字符串的数据结构,就是直接用c语言的数组。数据结构非常紧凑。
2、数据拷贝、网络连接、服务器的请求处理,中间的数据拷贝采用了零拷贝的形式,进一步的提高了内存内部数据的流转。
在3万并发连接下,开启的10个nginx进程才消耗150M内存(15M*10=150M)
配置文件非常简单:
仅一个配置文件,配置相关各种指令即可,非常简单。有很多明确的指令,不同的指令有着不同的功能。不同的指令工作在Ngnix不同的业务周期内,来进行配置。
成本低廉:
开源免费的,nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币
支持Rewrite重写规则:
可以根据域名、URL的不同,将HTTP请求分到不同的后端服务器群组
内置的健康检查功能:
如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问。
节省带宽:
支持GZIP压缩,可以添加浏览器本地缓存的Header头
稳定性高:
用于反向代理,宕机的概率微乎其微
以上功能可以感觉高,Ngnix设计的非常精炼,内存使用高效,它的网络模型采用
正向代理:
类似一个跳板机,代理访问外部资源。
客户端你的网络无法访问互联网上的某个网站。可以配置一个正向代理服务器,客户端请求先发到到正向代理服务器上,正向代理服务器转发请求到互联网上的网站,网站相应请求给正向代理服务器,正向代理服务器再转发响应给客户端。(所以说正向代理是朝外的,访问外部互联网的)
反向代理:
实际方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到结果返回给internet上请求连接的客户端,此时代理服务器对外就变现为一个服务器。
方向代理服务器提供一个入口,Web服务器无法直接访问。
反向代理作用:
1、保证内网安全,可以使用反向代理功能提供我WAF功能,阻止Web攻击。大型网站,通常将反向代理服务器作为公网地址,Web服务器是内网。
2、负载均衡,通过反向代理服务器来优化网站的负载。
负载均衡原理:
负载均衡,字面理解可以解释N台服务器平均分担负载,不会应为某台服务器负载高宕机和某台服务器限制的情况。那么负载均衡的前提就是要2台以上服务器才能实现。
Ngnix负载均衡四种配置方案:
1、轮询,Round Robin。
根据Ngnix配置文件中的顺序,依次将客户端的Web请求分发到不同的后端服务器上。
2、最少连接Last_conn
Web请求会被转发到连接数最少的服务器上。
3、IP地址哈希ip_hash
前面两种负载均衡的方案中,同一客户端连续的Web请求可能会被分发到不同的后端服务器上进行处理,因此如果涉及到回话Session,那么回话比较复杂。常见的是基于数据库的回话持久化。要克服上面的难题,可以使用基于IP地址Hash的负载均衡方案。这样的话,同一客户端的Web请求会被分发到同一后端服务器上进行处理。
4、基于权重weight
基于权重的负载均衡既Weight Load balancing,这种方式下,我们可以配置Ngnix把请求更多的分发到高配置的后端服务器上,把相对较少的请求分发到低配置服务器上。
负载均衡配置: