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;
}