Nginx配置反向代理(包括负载均衡调度算法详解)

Nginx的负载均衡以及反向代理

欢迎来到我的小森林嘻嘻嘻
今天我们叙述一下配置Nginx的反向代理和负载均衡
那么我们为什么要是用负载均衡和反向代理呢?
归名一点 如下

为什么使用Nginx Nginx的优点

**Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。
Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。
Nginx的稳定性、功能集、示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。
Nginx的功能
**1、反向代理,尤其是反向代理。
Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器

接下来还是带着大家一起先来了解一下Nginx的配置文件的参数 我们先讲怎么安装Nginx

1. 安装Nginx
2. 了解Nginx配置参数
3. 配置负载均衡和反向代理

安装Nginx 安装Nginx选项和参数有很多,我们一个一个讲

安装Ngixn  [Nginx的官网](http://nginx.org/)  包自己下载
装依赖环境吧 yum - y install pcre-devel zlib-devel openssl-devel (一定装不然报错)
tar zxf nginx-1.17.2.tar.gz  #解压Nginx我相信都会
cd nginx-1.17.2/
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module
接着解释一下参数
--with-http_ssl_module >>>enable ngx_http_ssl_module启用ssl支持 模块提供对HTTPS必要的支持。
--with-http_gzip_static_module >>>  用gzip方法压缩响应数据,节约带宽
--with-http_stub_status_module >>>主要用于查看Nginx的一些状态信息. 
--user=nginx
--group=nginx # 这个我就不多说了 当然你也可以使用别的用户运行Nginx
接着编译完成之后
我们 make && make install							
 ln -s /usr/local/nginx/sbin/* /usr/sbin/

接着我们进行一个小步骤
启动Nginx的状态监控

vim /usr/local/nginx/conf/nginx.conf
location /status {
                 stub_status on ;
      } 启动status模块
 写到 server模块的后面

在这里插入图片描述
然后访问测试一下 http://192.168.114.6/status # 亲们 你们的IP是多少 你就访问多少
在这里插入图片描述
2.了解Nginx配置参数

1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
2、events:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3、http:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
4、server:配置虚拟主机的相关参数,一个http中可以有多个server。
5、location:配置请求的路由,以及各种页面的处理情况。

3.配置负载均衡
先讲一下Nginx的负载均衡和反向代理的区别
负载均衡需要通过反向代理来实现
反向代理就是指nginx作为前端服务器,将请求转发到后端,再将后端服务器的结果,返回给客户端
它在中间做了一个代理服务器的角色(Route转发)
负载均衡对反向代理增加了一些策略,因为后端是多台服务器,nginx会根据设定的策略将请求转发给一个相对空闲的服务器,对负载进行分别进行发送,减轻服务器压力

vim /usr/local/nginx/conf/nginx.conf
upstream webcluster {  #webcluster 集群名称
        server 192.168.10.10:80 weight=1 max_fails=3 fail_timeout=10s; #第一个节点
        server 192.168.10.2:80 weight=1 max_fails=3 fail_timeout=10s; #第二个节点
}
max_fails=3 失败最大尝试次数
fail_timeout=失败超时时间
weight=权重
然后在你的localtion中写入
 location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://webcluster;#要访问的反向代理名称 
        }

写到server的上面
因为属于http的配置 所以要写的http的括号里面
在这里插入图片描述
两个分别是你Nginx的代理节点 为了验证效果
192.168.114.7 我再次装一个Nginx
192.168.114.10 我装一个Apache
装好之后 第二台Nginx不需要进行配置
我们来访问第一个Nginx进行测试反向代理是否正确
http://192.168.114.6/
在这里插入图片描述
http://192.168.114.6/ 出现轮询效果即可 反向代理完成
在这里插入图片描述
下面就是负载均衡+反向代理的一些算法
1.round robin轮询
轮询是upstream的默认分配方式。即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除
upstream backend {
server 192.168.10.11:8000;
server 192.168.10.12:8001;
server 192.168.10.13:8002;
}
2.加权轮询 wrr weight round robin
轮询的加强版 即可指定轮询比率 weight和访问几率成正比,主要用于后端服务器异质的场景下。
upstream backend {
server 192.168.10.11 weight=1
server 192.168.10.12 weight=2
server 192.168.10.13 weight=3
}
3.ip_hash
每个请求按照访问ip (即Nginx的前置服务器或客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session(会话)一致问题
upstream backend {
ip_hash;
server 192.168.10.11:8000;
server 192.168.10.12:8001;
server 192.168.10.13:8002;
}
4.fair
公平的按照后端服务器的响应时间(rt) 来分配请求 ,响应时间短即rt小的后端服务器优先分配请求
upstream backend {
ip_hash;
server 192.168.10.11;
server 192.168.10.12;
server 192.168.10.13;
fair;
}
5.url_hash
与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务,主要用于后端服务器为缓存的场景下。
upstream backend {
server 192.168.10.11;
server 192.168.10.12;
server 192.168.10.13;
hash_$request_url;
hash_method crc32;
}
其中 hash_method为使用的hash算法,需要注意的是:此时server语句中不能加weight参数

发布了15 篇原创文章 · 获赞 22 · 访问量 2854

猜你喜欢

转载自blog.csdn.net/Mint_Alone/article/details/100643964
今日推荐