目录
7.2 加权轮询(Weighted Round Robin)
一、什么是nginx
Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的http://Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris,AIX,Mac OS等操作系统上
Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动。
二、代理
代理:
代理就相当于中间商,本来A和B是可以直接连接的,但是此时添加了一个C在中间,A跟B不直接连接,而是通过C作为中介进行连接。最常见的例子就是二手东,其实很多我们租房子时签约的人不是房子的真正房东,而是房东委托的中介,房东不想管事或者房子太多,只靠自己无法进行管理,所以才会通过中介(代理)进行处理,像蛋壳、自如这样的租房软件其实也是中介的一种,真正的房东是直接将房子委托给这样的第三方中介进行出租。
2.1正向代理
正向代理:在客户端部署代理服务器,代替客户端对外部网络发送和接收消息。客户端发送一个指定目标的请求给代理服务器,代理服务器再发送给目标服务器,目标服务器收到请求后,将响应的内容发送给代理服务器,代理服务器发给客户端。
在正向代理的过程中,代理服务器代替客户端向目标服务器发送请求,目标服务器不知道谁是真正的客户端,不知道访问自己的是一个代理服务器还是客户端。服务器只负责将响应包发送给请求方。
2.2反向代理
1、隐藏服务器真实IP
在服务器端配置代理服务器可以隐藏服务器的真实IP,防止恶意攻击者的攻击。
2、负载均衡
代理服务器可以将对业务服务器的请求根据预设算法分发到业务服务器上。
3、提高访问速度
对于静态页面的访问,代理服务器可以将数据存储到硬盘内,当出现有大量静态页面的访问时,可以直接从代理服务器获取响应。对于动态内容请求,代理服务器可以将缓存存在本地,提高访问响应速度。
4、提供安全障性
可以将代理服务器作为应用层的防火墙,拦截恶意的Web攻击。还可以为后端服务器统一提供加密和SSL加速(如SSL终端代理),提供HTTP访问认证等。
三、负载均衡
负载均衡是一种用于分配网络或系统负载的技术,能够将工作负载(如网络流量、请求、数据处理)均匀地分配给多个服务器、网络设备或计算资源,以提高系统的性能、可靠性和效率。
通过负载均衡,可以有效地消除单一服务器或网络设备上的瓶颈,提高整体系统的吞吐量和响应速度。它可以根据预设的算法(如轮询、最少连接、加权分配等)将请求分发到不同的服务器或节点,使每个服务器都能够处理合理的负载,避免某些服务器过载而导致性能下降。
负载均衡通常用于高流量的网络环境中,比如互联网服务提供商、电子商务网站、云计算平台等。它可以提高系统的可伸缩性和可用性,同时还能提供故障容错和自动备份的功能。
总而言之,负载均衡通过分配工作负载,从而提高系统的性能和可靠性,是构建高效、可扩展的网络和系统架构的重要技术之一。
3.1 Nginx支持的负载均衡调度算法方式
Nginx是一款常用的开源反向代理服务器软件,它支持多种负载均衡调度算法方式。以下是Nginx常用的负载均衡调度算法:
1. 轮询(Round Robin):这是默认的负载均衡算法。它按顺序将请求依次分配给后端服务器,按照服务器列表的顺序平均分配负载。
2. 加权轮询(Weighted Round Robin):该算法在轮询的基础上引入了权重,使得不同服务器可以分配不同的负载。具有较高权重的服务器将获得更多的请求。
3. IP哈希(IP Hash):该算法根据客户端的IP地址计算哈希值,并使用该哈希值选择后端服务器。同一个IP地址的请求将总是被分发到同一个服务器上,适用于需要保持会话一致性的应用场景。
4. 最少连接(Least Connections):该算法根据后端服务器当前的连接数来选择最空闲的服务器。它将请求分发到当前连接数最少的服务器,以实现负载平衡。
5. URL哈希(URL Hash):该算法根据客户端请求的URL计算哈希值,并使用该哈希值选择后端服务器。相同URL的请求将总是被分发到同一个服务器上,适用于需要缓存或数据局部性的应用场景。
此外,Nginx还提供了更高级的负载均衡策略,例如基于响应时间、Least Time(最小响应时间)和GEOIP(根据客户端IP地址所属地理位置)等。
需要注意的是,选择合适的负载均衡调度算法取决于具体的应用需求和环境。你可以根据实际情况来选择适合的算法来实现负载均衡。
四、Nginx的安装与配置
4.1 安装依赖环境
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
4.2 安装nginx和使用
4.2.1 下载压缩包
https://nginx.org/download/nginx-1.15.10.tar.gz
4.2.2 上传压缩包
4.2.3 解压压缩包
tar -zxvf nginx压缩包名字
4.2.4 使用默认配置
先进入nginx文件夹下,在执行命令
[root@localhost nginx-1.15.10]# ./configure
4.2.5 编译
先进入nginx文件夹下,在执行命令
make&&make install
4.2.6 查看安装位置
whereis nginx
记着安装位置
4.2.7 启动停止
进入sbin文件夹
[root@hostM1 nginx-1.15.10]# cd /usr/local/nginx/sbin/
启动命令
[root@localhost sbin]# ./nginx
[root@hostM1 sbin]# ./nginx -s reload 重新加载
[root@hostM1 sbin]# ./nginx -s quit 此方式停止步骤是待nginx进程处理任务完毕进行停止。
[root@hostM1 sbin]# ./nginx -s stop:此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
4.2.8 查询nginx进程
ps aux|grep -v grep|grep nginx
ps -ef|grep -v grep|grep nginx
4.2.9 访问nginx
在浏览器地址栏输入IP,后边默认是:80
成功界面
五、nginx反向代理实例
实例一
访问nginx是反向代理到其他页面
执行4.2.6的查看安装位置
进入nginx文件
[root@localhost /]# cd nginx安装位置。
进入conf文件夹
[root@localhost nginx]# cd conf
编辑文件nginx.conf
[root@localhost conf]# vim nginx.conf
把框起来的注释掉
画横线的为你要方向代理的地址
实例二
在nginx地址后加上不同的地址的时候指向指定的地址
六、配置nginx开机关机开机启动
6.1 查看进程是否被占用
ps -ef | grep nginx //查看当前系统中关于nginx进程的详细信息
强制关闭进程
[root@localhost /]# kill -9 进程id
6.2 配置文件
切换到/lib/systemd/system/目录,创建nginx.service文件vim nginx.service
cd /lib/systemd/system/
touch nginx.service
vim nginx.service
添加内容
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
命令:
配置之后需要使文件生效
systemctl daemon-reload
退出并保存文件,执行systemctl enable nginx.service使nginx开机启动
#开机自启动
systemctl enable nginx.service
#停止开机自启动
systemctl disable nginx.service
#查询当前状态
systemctl status nginx.service
#启动服务
systemctl start nginx.service
#重新启动服务
systemctl restart nginx.service
#停止服务
systemctl stop nginx.service
#重新加载配置
systemctl reload nginx.service
七、Nginx支持的负载均衡调度算法方式案例
克隆2个虚拟机
并且修改静态IP
vi /etc/sysconfig/network-scripts/ifcfg-ens32
克隆的第一个虚拟机IP
克隆的第二个虚拟机IP
使用工具连接
7.1 轮询(Round Robin)
首先修改配置文件
修改成下面这个样子
这样就可以轮流访问两个地址了
结果:
--------------------------------------------------------------------------------------------------------
7.2 加权轮询(Weighted Round Robin)
首先也是修改配置文件
在后面加上weight = 数字
这样谁的数字值大,访问谁的概率就高
7.3 IP哈希(IP Hash)
也是修改配置文件