day12 keepalived和Rewrite重定向

day12 keepalived和Rewrite重定向

复习

1、HTTPS的作用

	传输过程中的加密。

2、四层负载均衡的使用场景
	2.1、MySQL服务
    2.2、SSH代理端口
    2.3、网站的负载均衡代理
3、全站HTTPS的配置方法
    3.1.创建ssl_key
        [root@lb01 ssl_key]# mkdir /etc/nginx/ssl_key
    3.2.生成公钥私钥
        [root@lb01 ssl_key]# openssl genrsa -idea -out server.key 2048      #私钥
        [root@lb01 ssl_key]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt         #公钥
    3.3.设置nginx代理,并加入强制跳转
    [root@lb01 ssl_key]# vim /etc/nginx/conf.d/game.conf 	
        upstream game{
     
                server 172.16.1.8:80;
                server 172.16.1.7:80;
                server 172.16.1.9:80;
        }
        #强制跳转   
        server{
     

            listen 80;
            server_name cjml.com;
            return 302 https://cjml.com;

    }
        server {
     
                server_name cjml.com;
                listen 443 ssl;
                ssl_certificate /etc/nginx/ssl_key/server.crt;
                ssl_certificate_key /etc/nginx/ssl_key/server.key;
                location /{
     
                        proxy_pass http://game;
                        include proxy_params;
                }
        }

    3.4.重启nginx并测试
    systemctl restart nginx

keepalived高可用(私网)

1.什么是高可用
	一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用户是无感知的。
	部署在整个集群中的一个高可用软件,作用是创建一个VIP(虚拟IP),在整个集群中有且只有一个机器上生成VIP,当这台机器出现问题时,keepalived将自动将VIP切换至其他的某一台服务器上。,注意vip要和机器在同一个网段

部署keepalived

主机 ip 身份
lb01 192.168.15.5 keepalived master(主力机)
lb02 192.168.15.6 keepalived backup(备用机)
虚拟网卡 192.168.15.3 虚拟网络VIP
1.先保证lb01和lb02的七层负载均衡一致
	#把game.conf同步过去
	[root@lb01 conf.d]# scp game.conf 172.16.1.6:/etc/nginx/conf.d/ 
	#把公钥私钥同步过去 
	[root@lb01 conf.d]# scp -r ../ssl_key/ 172.16.1.6:/etc/nginx/
2.安装keepalived(所有的流量机器都需要安装)
	[root@lb01 conf.d]# yum install keepalived -y 
	[root@lb02 conf.d]# yum install keepalived -y 
3.配置keepalived          #虚拟VIP无法在云服务器上使用,因为云服务器不支持虚拟IP。
	#如果找不到配置文件路径 可以rpm -qc keepalived
	3.1配置主节点
		[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
            #全局配置
            global_defs {
     
                #身份识别(全局唯一的)
                router_id lb01
            }

            #配置VRRP协议
            vrrp_instance VI_1 {
     
                #状态,MASTER和BACKUP
                state MASTER
                #绑定网卡
                interface eth0
                #虚拟路由标示,可以理解为分组
                virtual_router_id 50
                #优先级
                priority 100
                #监测心跳间隔时间
                advert_int 1
                #配置认证
                authentication {
     
                    #认证类型
                    auth_type PASS
                    #认证的密码
                    auth_pass 1111
                }
                #设置VIP
                virtual_ipaddress {
     
                    #虚拟的VIP地址(要和这个机器在同一个网段)
                    192.168.15.3
                }
            }
		3.2配置备用节点
			#全局配置
                global_defs {
     
                    #身份识别
                    router_id lb02
                }

                #配置VRRP协议
                vrrp_instance VI_1 {
     
                    #状态,MASTER和BACKUP
                    state BACKUP
                    #绑定网卡
                    interface eth0
                    #虚拟路由标示,可以理解为分组
                    virtual_router_id 50
                    #优先级
                    priority 90
                    #监测心跳间隔时间
                    advert_int 1
                    #配置认证
                    authentication {
     
                        #认证类型
                        auth_type PASS
                        #认证的密码
                        auth_pass 1111
                    }
                    #设置VIP
                    virtual_ipaddress {
     
                        #虚拟的VIP地址
                        192.168.15.3
                    }
                }
		3.3启动测试
		[root@lb01 keepalived]# systemctl start keepalived
		[root@lb01 keepalived]# ip a
			发现
		[root@lb02 keepalived]# systemctl start keepalived
		

抢占式和非抢占式

1.抢占式:可能会造成报错或者延时 ,自动跳转
	两个机器 如果一个宕机 跳到另一个,然后宕机的修好了,他如果优先级高的话他会抢夺回来流量,可能会报错或者延时
2.非抢占式:不会报错 非自动跳转(建议开启)
	2.1.两个节点的state都必须配置为BACKUP
    2.2.两个节点都必须加上配置 nopreempt
    2.3.其中一个节点的优先级必须要高于另外一个节点的优先级。

    两台服务器都角色状态启用nopreempt后,必须修改角色状态统一为BACKUP,唯一的区分就是优先级。
    

高可用时如果出现脑裂问题时怎么解决

脑裂:一台机器关闭了nginx 跳转不到另一台机器,一直在报错,
不只是keepalived关闭,nginx关闭时也需要切换服务器
#写脚本
 cat /etc/keepalived/check.sh 
#!/bin/bash
#1.判断端口 netstat -nutlp  80和443端口
#2.判断进程 ps -aux |grep [n]ginx

ps -aux | grep [n]ginx

if [ $? -ne 0 ];then
        systemctl restart nginx;

        sellp3;
        ps -aux | grep [n]ginx
        if [ $? -ne 0 ];then

        systemctl stop keepalived;
        fi
fi

#加入到vi /etc/keepalived/keepalived.conf 
#每5秒执行一次脚本,脚本执行内容不能超过5秒,否则会中断再次重新执行脚本
#check_web是名字,随便定义
vrrp_script check_web {
     
        # 指定脚本路径
        script "/etc/keepalived/check.sh"
        # 5秒钟执行一次
        interval 5
}
#调用计划的脚本
track_script {
     
	check_web
}

动静分离

1、location的五种匹配策略
优先级  =  >  * > (~ = ~*) > /

	=     完全匹配
	*	  以xxx开头
	~  	  正则匹配(区分大小写)
	~*	  正则匹配(不区分大小写)
	/	  全部匹配
	
例子1.证明=是完全匹配
#编辑新的.conf文件
[root@web02 conf.d]# cat location.conf 
server{
     
	server_name cjml.com;
	listen 80;

	location /{
     
		#指定解析当前内容的类型
		default_type text/html;
		#返回内容 状态码 具体内容
		return 200 "location /";	

	}
		location =/lol{
     
                #指定解析当前内容的类型
                default_type text/html;
                #返回内容 状态码 具体内容
                return 200 "location =lol";
	}
}
例子二:实现动静分离nginx代理图片
[root@web02 conf.d]#  vim img.conf 
server{
     
        server_name img.com;
        listen 80;

        location /{
     
                root /opt/html;
                index index.html;
        }
        location ~* \.(jpg|jpeg|mp4)$ {
       # 使用正则以xxx结尾
                root /opt/html/img;
	        }
}


Rewrite四种重定向策略

名字 作用
last 本条规则匹配完成后,停止匹配,不再匹配后面的规则(在Nginx内部按照重定向的规则重新访问一遍)
break 本条规则匹配完成后,停止匹配,不再匹配后面的规则(在Nginx内部按照重定向的规则去对应的跟目录(root 指定的路径)访问)
redirect 返回302临时重定向,地址栏会显示跳转后的地址(浏览器不记录缓存)
permanent 返回301永久重定向,地址栏会显示跳转后的地址(浏览器记录缓存,下一次访问不走nginx服务,直接在浏览器跳转)
作用:Rewrite主要实现url地址重写,以及重定向,就是把传入web的请求重定向到其他url的过程
格式:rewrite [匹配内容] [从定向到的内容] [重定向规则];

案例1:要求访问192.168.15.8,临时重定向到百度

server{
     
        server_name img.com;
        listen 80;

        location / {
     
                rewrite (.*) https://www.baidu.com redirect;
        }
}

案例2:要求访问192.168.15.8,永久重定向到百度

	rewrite (.*) https://www.baidu.com permanent;

案例3:要求访问192.168.15.8/last,重定向到192.168.15.8/test

        location =/last{
     
                rewrite (.*) /test last;
        }

案例4:要求访问192.168.15.8/break,重定向到192.168.15.8下面的test目录。
        location = /break{
     
                rewrite (.*) /test break;
        }

你可能感兴趣的:(互联网架构,nginx,linux,运维)