Linux下的Nginx反向代理、负载均衡、动静分离和集群的搭建

一、反向代理

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。

1. 通过反向代理访问tomcat下的项目

修改nginx安装目录下的nginx.conf配置文件,当在浏览器访问centOS的IP:80时,自动代理跳转到tomcat

//启动tomcat服务
	cd /usr/local/src/tomcat/apache-tomcat-7.0.57/bin
	./startup.sh

//修改配置,修改前先关闭服务  ./nginx -s stop
	cd /usr/local/nginx/conf
	vi nginx.conf进入编辑添加:
	proxy_pass http://localhost:8080;
	退出保存  Esc  :wq
//启动nginx
	cd /usr/local/nginx/sbin
	./nginx

在这里插入图片描述
在tomcat下的webapps中上传一个项目,在浏览器输入 http://192.168.16.128/damishop/index.html访问到页面,即可通过nginx访问tomcat及其项目。

2. 使用nginx反向代理,根据访问路径跳转到不同端口服务中

  1. 在usr/local/src下放两个tomcat,一个端口8080另一个端口8081

  2. 在webapps下分别放两个项目

  3. 添加nginx监听端口为8001,根据路径分别代理8080和8081端口号

修改代理端口号

server {
        listen       8001;
        server_name       localhost;
        location ~/damishop/ {
            proxy_pass http://localhost:8080;
        }
        location ~/xiaomishop/ {
            proxy_pass http://localhost:8081;
        }
    }
  1. 防火墙开放8001、8080、8081端口号,开启tomcat、nginx服务

  2. 在浏览器访问两个路径,就可以使一个nginx服务器反向代理两个tomcat进行访问

    192.168.16.128:8001/xiaomishop/index.html

    192.168.16.128:8001/damishop/index.html

二、负载均衡

负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。

nginx负载均衡分配策略

1、轮询(默认) 
	每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。 
2、weight 
    weight 代表权重默认为 1,权重越高被分配的客户端越多 指定轮询几率weight 和访问比率成正比,用于后端服务器性能不均的情况。 例如: 
    upstream server_pool{ 
        server 192.168.16.128 weight=5; 
        server 192.168.16.129 weight=10; 
    }
3、ip_hash 
    每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 例如: 
    upstream server_pool{ 
        ip_hash; 
        server 192.168.16.128:80; 
        server 192.168.16.129:80; 
    }
4、fair(第三方) 
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。 
    upstream server_pool{ 
        server 192.168.16.128:80; 
        server 192.168.16.129:80; 
        fair; 
	}

在这里插入图片描述

1.部署两个tomcat服务器。如8080、8081
2.在每个tomcat下的webapps分别创建edu/test.html用于测试,内容可以不同
3.在nginx的配置文件进行负载均衡配置 nginx/conf/nginx.conf

在这里插入图片描述

upstream myserver{
   server localhost:8080;
   server localhost:8081;
}
server {
    listen       8001;
    server_name     localhost;
    location /{
            proxy_pass  http://myserver;
    }
 }
4.在浏览器访问IP:8001/edu/test.html,不断刷新页面,可以看出url相同,在两台服务器间进行切换

三、动静分离

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。

1.在Linux系统中上传静态资源,用于访问。在根目录下创建/data/xiaomishop文件
2.在niginx下进行配置 nginx/conf/nginx.conf
 server {
        listen       80;
        server_name  localhost;
        location /xiaomishop/ {
            root   /data/;
            index  index.html index.htm;
        }
 }
3.在浏览器通过nginx进行访问,没有tomcat也可以正常运行

192.168.16.128/xiaomishop/index.html

三、集群搭建

由多台服务器组成的集群服务器,对外有一个统一的虚拟IP地址,每台集群服务器上都装有相同的应用程序,由一个负载均衡器来分配在哪台服务器上进行操作。各个集群服务器之间是相互通信的,一旦发生故障,可以自动转移到其他服务器。
在这里插入图片描述

1.准备两台虚拟机

集群一般搭建在多个电脑上,这里用两台虚拟机模拟,测试可以直接复制CentOS文件,避免繁琐的搭建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V84Rtyla-1629201592764)(C:\Users\LJW\AppData\Roaming\Typora\typora-user-images\1629169804644.png)]

2.在两台虚拟机中分别安装nginx
3.在两台虚拟机中分别安装Keepalived,显示完毕即成功。
yum install keepalived -y

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Mh8aip5-1629201592765)(C:\Users\LJW\AppData\Roaming\Typora\typora-user-images\1629170543811.png)]

4.配置Keepalived

“priority”值最大的将成为集群中的Master节点,而其他都是Backup节点

​ 1)在充当主服务器的虚拟机中配置keepalived.conf,或者上传修改好的配置文件(/etc/keepalived/keepalived.conf)

! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script chk_http_port{
	script "/usr/local/src/nginx_check.sh"
	interval 2
	weight 2
}
vrrp_instance VI_1 {
    state MASTER  ——————————>主服务器
    interface ens33 ——————————>网卡名字
    virtual_router_id 51
    priority 100  ——————————>权值
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.16.110 ——————————>虚拟IP,保证前三位与虚拟机保持在同一网段
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ovY1o0bX-1629201592767)(C:\Users\LJW\AppData\Roaming\Typora\typora-user-images\1629171151660.png)]

​ 2)在/usr/local/src下上传指定脚本 nginx_check.sh

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

​ 3)把另一个服务区虚拟机当作从服务器,进行相关配置keepalived.conf,或者上传修改好的配置文件(/etc/keepalived/keepalived.conf)

! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script chk_http_port{
	script "/usr/local/src/nginx_check.sh"
	interval 2
	weight 2
}
vrrp_instance VI_1 {
    state  BACKUP ——————————>从服务器
    interface ens33 ——————————>网卡名字
    virtual_router_id 51
    priority 90  ——————————>权值,权值大小设置小于主服务器
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.16.110 ——————————>虚拟IP,保证前三位与虚拟机保持在同一网段
    }
}

​ 4)同2)在/usr/local/src下上传指定脚本 nginx_check.sh

5.分别启动两台虚拟机中的nginx和keepalived
./nginx
systemctl start keepalived.service
6.测试,在网页输入 192.168.16.110:8001/xiaomishop/index.html,显示出项目就代表成功

在这里插入图片描述

7.关闭任意一个服务器,都可以正常运行。
systemctl stop keepalived.service
./nginx -s stop

Guess you like

Origin blog.csdn.net/qq_45299673/article/details/119764756