目录
Nginx 基本概念
正向代理与反向代理
为了便于大家理解,先来了解一下基础知识,Nginx是一个高性能的方向代理服务器,那么什么是反向代理呢?
代理是在服务器和客户端之间假设的一层服务器,代理将接收客户端的请求并转发给服务器,然后把服务端的响应转发给客户端。
不管是正向代理还是反向代理,实现的都是上述功能。
正向代理
正向代理(forward)意思是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取的内容,客户端向代理发送一个请求,并指定请求目标(原始服务器),然后代理向原始服务器转交请求并将获取到的内容全部返回给客户端。
正向代理 视为我们服务的,也就是为客户端服务的,客户端可以根据正向代理方位到他们身无法访问的服务器资源。正向代理对我们是透明的,对服务器是非透明的,即服务器不知道自己接受的是来自代理的访问还是真实客户端的访问。
反向代理
反向代理(Reverse Proxy)是指代理服务器来接受internet上的链接请求,然后把请求转发给内部网络上的服务器。并将服务器上得到的结果返回给internet上请求链接的客户端,此时代理服务器岛外就表现为一个反向代理的服务器。
反向代理视为服务端服务的,可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发和负载均衡等。
反向代理对付段是透明的,对客户端非透明,即客户端并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。
负载均衡
如果请求数过大,单个服务器解决不了,我们增加服务器数量,然后将请求分发到各个服务器上,将原先的请求集中到单个服务器上的情况改为请求分发到多鞥服务器上就是负载均衡。
内置负载策略
轮循(默认)
http {
# ... 省略其它配置
upstream tomcats {
server 192.168.116.13:8080;
server 192.168.116.14:8080;
server example.com:8080;
}
server {
listen 80;
location / {
proxy_pass http://tomcats;
}
}
# ... 省略其它配置
}
proxy_pass http://tomcats:表示将所有请求转发到tomcats服务器组中配置的某一台服务器上。
upstream模块:配置反向代理服务器组,Nginx会根据配置,将请求分发给组里的某一台服务器。tomcats是服务器组的名称。
upstream模块下的server指令:配置处理请求的服务器IP或域名,端口可选,不配置默认使用80端口。通过上面的配置,Nginx默认将请求依次分配给100,101,102来处理,可以通过修改下面这些参数来改变默认的分配策略:
1、weight:默认为1,将请求平均分配给每台server。
upstream tomcats {
server 192.168.116.13:8080 weight=2; # 2/6次
server 192.168.116.14:8080 weight=3; # 3/6次
server 192.168.116.15:8080 weight=1; # 1/6次
}
上例配置,表示6次请求中,13分配2次,14分配3次,15分配1次。
2、fail_timeout:默认为10秒。某台Server达到max_fails次失败请求后,在fail_timeout期间内,nginx会认为这台Server暂时不可用,不会将请求分配给它。
3、max_fails:默认为1,某台Server允许请求失败的次数,超过最大次数后,在fail_timeout时间内,新的请求将不会分配给这台机器。如果设置为0,Nginx会将这台Server置为永久无效状态
upstream tomcats {
server 192.168.116.13:8080 weight=2 max_fails=3 fail_timeout=15;
server 192.168.116.14:8080 weight=3;
server 192.168.116.15:8080 weight=1;
}
192.168.116.13这台机器,如果有3次请求失败,nginx在15秒内,不会将新的请求分配给它。
4、backup:备份机,所有服务器挂了之后才会生效。
5、max_conns:限制分配给某台Server处理的最大连接数量,超过这个数量,将不会分配新的连接给它。默认为0。
fair
根据服务器的响应时间来分配请求,响应时间短的优先分配,即负载压力小的优先会分配。
url_hash
按请求url的hash结果来分配请求,使每个url定向到同一个后端服务器,服务器做缓存时比较有效。
加快服务器的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,降低原来单个服务器的压力
ip_hash
按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题,但是如果某个服务器宕机,这个服务器的session信息就会丢失,目前较好的办法就是session+redis,把session保存在redis中。