1.Nginx简介
(1)支持系统
Nginx (engine x) 是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器, 在BSD-like 协议下发行,代码完全用C语言从头写成,可以在UNIX 、GUN/Linux 、BSD、 Mac OS X 、Solaris 以及Microsoft Windows等操作系统中运行。
- 几乎可以在所有的系统中BU部署和提供服务。
(2)作者
Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的(用于解决C10k问题)。事实上Nginx的并发能力确实在同类型的网页服务器中表现比较好。
- C10k:(C:concurrent,k:1万)1台服务器上提供10万并发的Web服务器提供能力。现在已经达到C100k甚至更高。
(3)特点
Nginx 是一个很强大的高性能Web和反向代理服务。其特点是高性能(C语言开发,编译形式部署,模块直接和Nginx 编译在一起)、高并发(网络是NIO性能特别高)、低内存占用(类似于零拷贝机制,减少内存占用和数据复制)。
- 基于反向代理,Nginx 作为负载均衡主要有以下优点:
高并发连接、
配置文件非常简单、
成本低廉、
支持Rewrite重写规则、
内置的健康检查功能、
节省带宽、
稳定性高
内存消耗小(大量自带数据结构,采用C语言数组设计,数据结构紧凑;数据拷贝:网络连接到服务器的请求处理,中间有数据拷贝,采用零拷贝机制,提高内存内部数据流转)。
- 其他常用Web服务器
Apache:可增加PHP模块,支持PHP动态脚本。
Tomcat:本身实现Java的servlet协议,可以运行Java代码、脚本,例如jsp。
Nginx :作为静态Web服务器(和Apache、Tomcat功能类似):服务器、解析js、html脚本,目前不支持动态语言。
- 经常用Nginx 做
反向代理
,通过web stream等把前端请求,转到后端业务服务器上。网络是NIO性能特别高。
2.正向代理和反向代理
(1)正向代理(对外):
正向代理类似于一个跳板机,代理访问外部资源。
(2)反向代理(对内):
实际运行方式是指代理服务器来接受internet上的连接请求,然后请求转发给内部网络上的服务器,并将从服务器上得到的结构返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理作用:
保证内网的安全
(作为一个盾牌),可以使用反向代理提供WAF功能,阻止Web攻击。大型网站通常将反向代理作为公网访问地址,Web服务器是内网。
负载均衡
,通过反向代理服务器来优化网站的负载。
3.负载均衡
(1)原理
负载均衡:N台服务器平均分担负载,不会因为某台服务器负载高宕机和某台服务器闲置的情况。那么负载均衡的前提就是要2台以上服务器才能实现。
4中方案配置:
-
轮询
轮询即Round Robin,根据Nginx配置文件中顺序,一次把客户端的Web请求分发到不同的后端服务器上。 -
最少连接least_conn
Web请求会被转发到连接数量少的服务器上。 -
IP地址哈希ip_hash
前述的两种负载均衡方案中,同一客户端连续的web请求可能会被分发到不同的后端服务器进行处理,因此如果涉及到会话Session,那么会话会比较复杂。常见的是基于数据库的会话持久化。要客服上面的难题,可以使用基于IP地址哈希的负载均衡方案。这样,同一客户连续的web请求会被转发到同一服务器进行处理。 -
基于权重weight
基于权重的负载均衡即weighted Load Balancing,这种方式下,我们可以配置Nginx把请求更多地分发到高配置的后端服务器上,把相对较少的请求分发到低配置服务器。
(2)配置
- 配置基于Round Robin轮询的负载均衡(默认策略)
需要注意以下几点:
缺省配置就是轮询策略
nginx负载均衡支持http和https协议,只需要修改proxy_pass后协议即可。
nginx支持FastCGI,uwsgi,SCGI,memcached的负载均衡,只需将proxy_pass改为fastcgi_pass,uwsgi_pass,scgi_pass,memcached_pass即可。
此策略适合服务器配置相当,无状态且短平快的服务使用。
- 配置基于ip_hash的负载均衡
需要注意以下几点:
ip哈希负载均衡使用ip_hash指令定义;
nginx使用客户端的ip地址进行哈希计算,确保同一个服务器响应请求。
此策略适合有状态服务,比如session
- 配置基于least_conn的负载均衡
需要注意以下几点:
最少连接负载均衡通过least_conn指令定义;
此负载均衡策略适合请求处理长短不一造成服务器过载的情况。
- 配置基于权重的负载均衡
需要注意以下几点:
权重负载均衡需要使用weight指令定义;
权重越高分配到需要处理的请求越多;
此策略可以与最少连接负载和ip哈希策略结合使用;
此策略比较适合服务器的硬件配置差别比较大的情况。