Nginx负载均衡
Nginx是一款轻量级的web服务器/反向代理服务器以及电子邮件代理服务器,并在BSD协议下发行,可以在Unit、GNU/Linux、BSD、macos x、windows等操作系统中运行。其特点是占有内存少,高性能,并发能力强(10k并发),并且还能够提供强大的反向代理功能,它的并发能力在同类型的网络服务器中表现很好。
基于反向代理的功能,Nginx作为负载均衡主要有以下几点理由:
- 高并发连接
- 内存消耗少
- 配置文件非常简单
- 支持Rewrite重写规则
- 内置的健康监测功能
- 节省带宽
- 稳定性高
正向代理和反向代理
正向代理
正向代理类似一个跳板机,代理访问外部资源。(客户端->正向代理服务器->互联网->正向代理服务器->客户端)
反向代理
实际运行方式是指代理服务器来接受Internet互联网上的连接请求,然后将请求转发给内部网络上的服务器(也就是说反向代理服务器与内网的服务器在同一个内网中,它是客户端访问内网的入口),并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。(客户端->反向代理服务器->内网服务器->反向代理服务器->客户端)
反向代理的作用:
- 保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击。大型网站,通常将反向代理作为公网范文地址,web服务器是内网。
- 负载均衡,通过反向代理服务器来优化网站的负载。
Nginx负载均衡的4种方案配置
- 轮询
轮询即Round Robin,这是Nginx默认的配置策略。根据Nginx配置文件中的顺序,依次把客户端的web请求分发到不同的后端服务器上。
它的配置文件如下:
user www-data;
worker_processes auto;
pid/run/nginx.pid;
events{
#epoll是Linux上的事件模型,如果是其他系统,请注释掉
use epoll;
worker_connections 65535;
}
http{
# 指定被反向代理转发的网址以及负载均衡后的IP+port
upstream www.young.com {
server 127.0.0.1:8881;
server 127.0.0.1:8882;
server 127.0.0.1:8883;
}
server{
listen 80;
#指定虚拟主机的地址,通常是用户访问的网址
server_name www.young.com;
location / {
# 指定反向代理的网址
proxy_pass http://www.young.com;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
}
}
}
注意:需要在本机的hosts中添加"127.0.0.1 www.young.com"的网址映射。
注意事项
- 在http的配置项中配置负载均衡策略,如果不写,默认为轮询模式。
- Nginx负载均衡支持http和https协议,只需要修改proxy_pass后协议即可。
- Nginx支持FastCGI,SCGI,uwsgi,memcached的负载均衡,只需将proxy_pass改为fastcgi_pass,uwsgi_pass,scgi_pass,memcached_pass即可。
- 轮询策略适合服务器配置相当,无状态且短平快的服务使用。
-
最少连接least_conn
web请求会被转发到连接数最少的服务器上。它适合请求处理时间长短不一造成服务器过载的情况。配置时需要在upstream中添加least_conn;
即开启此策略。 -
IP地址哈希
上边的两种负载均衡方案中,同一客户端连接的web请求可能会被分发到不同的后端服务器进行处理,因此会涉及到会话session,因为不同服务器的会话session是不一样的,所以要想识别当前请求是否与上次会话为同一用户,那么需要将session会话保存在Redis、memcached、MySQL等缓存服务器上去。而另外一种解决session一致的方法就是使用IP地址哈希的分发方案,使同一用户的请求一直被分发到同一服务器。
配置文件中,在upstream中添加ip_hash的配置参数即开启了此策略。
注意事项
- 它使用ip_hash指令定义
- Nginx使用客户端的ip地址进行哈希计算,确保使用同一个服务器响应请求。
- 此策略适合有状态服务,比如session。
- 基于权重的分发
对不同的服务器设置不同的权重,权重越高接收到的请求数量越多。配置文件中,在upstream的每个server后边添加weight=权重值
即可。
注意事项
- 权重越高分配到需要处理的请求越多。
- 它可以与最少连接负载和ip哈希策略结合使用。
- 它适合服务器硬件配置差别比较大的情况。
关于Nginx具体的配置文件的参数说明,请看下一节分布式系统系列--(三)Nginx配置文件的相关参数说明