Nginx反向代理及负载均衡

Nginx实现负载均衡

实验环境:

server4:172.25.51.4(nginx服务器)
server5:172.25.51.5(apache服务器)
server6:172.25.51.6(apache服务器)

一、编译安装nginx

<1>下载并解压nginx-1.14.0.tar.gz

[root@server4 ~]# tar zxf nginx-1.14.0.tar.gz 

这里写图片描述
<2>编译

[root@server4 nginx-1.14.0]# ./configure
[root@server4 nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio

知识详解:
./configure是源代码安装的第一步,主要的作用是对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系,但并不是所有的tar包都是源代码的包,可以ls看看有没有configure这个文件,如果是二进制的包,解压后直接就能使用.


根据提示安装软件,再次编译

[root@server4 ~]# yum install gcc -y
[root@server4 ~]# yum install -y pcre-devel
[root@server4 ~]# yum install -y openssl-devel

<3>修改配置文件

[root@server4 nginx-1.14.0]# vim src/core/nginx.h

示图:删除版本信息,即为保证安全,对外不显示版本信息
这里写图片描述

[root@server4 nginx-1.14.0]# vim auto/cc/gcc

示图:注释debug信息
这里写图片描述

<4>编译并安装

[root@server4 nginx-1.14.0]# make && make install

编译后生成Makefile文件
在这里插入图片描述
——————————————————————————————————————————
示图:未注释debug信息
这里写图片描述
示图:注释debug信息
这里写图片描述
————————————————————————————————————————————
<5>链接

[root@server4 ~]# ln -s /usr/local/nginx/sbin/nginx /sbin/

在这里插入图片描述<6>开启nginx

[root@server4 sbin]# nginx -t      ##检测配置文件的正确性
[root@server4 sbin]# nginx         ##开启nginx,注意开启前保证80端口不能被占用

在这里插入图片描述
在这里插入图片描述
注意:重新启动nginx服务,使用以下命令

nginx -s reload

<7>测试nginx服务
1> nginx服务安装成功
在这里插入图片描述
2> 编写nginx测试页

[root@server4 html]# pwd
/usr/local/nginx/html
[root@server4 html]# ls
50x.html  index.html
[root@server4 html]# vim test.html
<h1>server4</h1>

示图:访问172.25.51.4/test.html
在这里插入图片描述

二、负载均衡

<1>安装部署httpd服务:

[root@server5 ~]# yum install -y httpd
[root@server5 ~]# /etc/init.d/httpd start
[root@server5 ~]# vim /var/www/html/index.html
<h1>server5</h1>

server6操作同server5

<2>部署nignx实现负载均衡

[root@server4 ~]# useradd nginx
[root@server4 ~]# cd /usr/local/nginx/conf/
[root@server4 conf]# vim nginx.conf
  2 user  nginx nginx;
  3 worker_processes  1;                   ##工作进程数为1
  4 #worker_processes auto;             ##cpu自动配置进程
  5 #worker_cpu_affinity 01 10;          ##进程为2,绑定cpu
  6 #worker_cpu_affinity 0001 0010 0100 1000;  ##进程为4
 15 events {
 16     use epoll;
 17     worker_connections  65535;
 18 }
 22 http {
 23      upstream westos {    ##算法调度
 24         #ip_hash;                 
 25         server 172.25.51.5:80;   ##RS主机IP
 26         server 172.25.51.6:80;
 27     }   
128 server {                         ##虚拟主机
129         listen 80;
130         server_name www.westos.org;         ##代理域名         
131         location / {               ##调用westos
132             proxy_pass http://westos;
133         }
134 }
 [root@server4 ~]# nginx -t 	
 [root@server4 ~]# nginx -s reload

示图:查看进程数为1
在这里插入图片描述
示图:设定进程为2,查看进程数
在这里插入图片描述
<3>安全限制

[root@server4 nginx-1.14.0]# vim /etc/security/limits.conf     ##安全限制
 51 nginx           -       nofile          65536
 [root@server4 ~]# nginx -t 	
 [root@server4 ~]# nginx -s reload

测试:
在这里插入图片描述
<4>真机域名解析

[root@foundation51 ~]# vim /etc/hosts
172.25.51.4 www.westos.org

<5>测试:负载均衡
在这里插入图片描述
在这里插入图片描述

三、nginx中upstream轮询机制介绍

Nginx中upstream有以下几种方式:

1、轮询(weight=1)

默认选项,当weight不指定时,各服务器weight相同,
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
如果后端服务器down掉,能自动剔除。
比如下面配置,51.5服务器的访问量为51.6服务器的两倍。

[root@server4 ~]# vim /usr/local/nginx/conf/nginx.conf
 22 http {
 23 
 24      upstream westos {
 25         #ip_hash;
 26         server 172.25.51.5:80 weight=2;
 27         server 172.25.51.6:80;
 28     }
[root@server4 ~]# nginx -s reload

测试:
在这里插入图片描述

3、ip_hash机制

每个请求按访问ip的hash结果分配,nginx中的ip_hash技术能够将某个ip的请求定向到同一台后端web机器中,这样每个访客固定访问一个后端服务器,可以解决session不能跨服务器的问题。
如果后端服务器down掉,要手工down掉。
ip_hash在upstream配置中定义:

[root@server4 ~]# vim /usr/local/nginx/conf/nginx.conf
 22 http {
 23 
 24      upstream westos {
 25         ip_hash;
 26         server 172.25.51.5:80;
 27         server 172.25.51.6:80;
 28     }
[root@server4 ~]# nginx -s reload

测试:
在这里插入图片描述

4、fair(第三方插件)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream resinserver{
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    fair;
}
5、url_hash(第三方插件)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存服务器时比较有效。在upstream中加入hash语句,hash_method是使用的hash算法

upstream resinserver{
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    hash $request_uri;
    hash_method crc32;
}

设备的状态有:
  • down 表示单前的server暂时不参与负载。
  • weight 权重,默认为1。 weight越大,负载的权重就越大。
  • max_fails 允许请求失败的次数默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
  • fail_timeout max_fails次失败后,暂停的时间。
  • backup 备用服务器, 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

四、nginx双机热备

[root@server4 ~]# vim /usr/local/nginx/conf/nginx.conf
 22 http {
 23 
 24      upstream westos {
 25         #ip_hash;
 26         server 172.25.51.5:80;
 27         server 172.25.51.6:80;
 28         server 172.25.51.4:8080 backup;   ##备用服务器
 29     }
[root@server4 ~]# nginx -s reload
[root@server4 ~]# vim /etc/httpd/conf/httpd.conf 
 136 Listen 8080
[root@server4 ~]# /etc/init.d/httpd start

在这里插入图片描述
测试:
<1>当服务器正常时,nginx不会给备用服务器转发任何请求。
在这里插入图片描述
<2>只有当其他节点全部无法连接时,nginx才会启用备用节点。

[root@server5 ~]# /etc/init.d/httpd stop
[root@server6 ~]# /etc/init.d/httpd stop

在这里插入图片描述

五、基于cookie的负载均衡解决方案—sticky

Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route
1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
2.后端服务器处理完请求,将响应数据返回给nginx。
3.此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
4.客户端接收请求,并保存带route的cookie。
5.当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。
实验前,停止原来的nginx功能:

[root@server4 ~]# nginx -s stop

<1>下载安装包并解压

[root@server4 ~]# tar zxf nginx-1.10.1.tar.gz 
[root@server4 ~]# tar zxf nginx-sticky-module-ng.tar.gz 

<2>编译安装

[root@server4 ~]# cd nginx-1.10.1
[root@server4 nginx-1.10.1]# ./configure --help   ##查看帮助
[root@server4 nginx-1.10.1]# ./configure --prefix=/opt/nginx --add-module=/root/nginx-sticky-module-ng
[root@server4 nginx-1.10.1]# make & make install

<3>更改配置文件

[root@server4 ~]# cd /opt/nginx/conf/
[root@server4 conf]# cp /usr/local/nginx/conf/nginx.conf .  
[root@server4 conf]# vim nginx.conf   ##配置文件更改,其余配置同前相同

示图:配置文件更改部分,加载sticky模块,实现cookie效果
在这里插入图片描述
示图:当前配置文件所在位置
在这里插入图片描述
<4>启动服务

[root@server4 conf]# cd ..
[root@server4 nginx]# ls
conf  html  logs  sbin
[root@server4 nginx]# sbin/nginx -t
[root@server4 nginx]# sbin/nginx      ##注意:没有设置软链接,需要绝对(相对)路径调用
[root@server5 ~]# /etc/init.d/httpd start
[root@server6 ~]# /etc/init.d/httpd start

<5>测试:浏览器中保留cookies,进行匹配后分发后端服务器
浏览器刷新,依旧为server6界面,当清空浏览器后,保持在server5界面
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值