Nginx进阶、Keepalived认识、使用
蓝色
Nginx解决跨域问题&防盗链
浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。在前后端分离的模式下,前后端的域名是不一致的,此时就会发生跨域访问问题。在spring boot中我们可以通过CorsFilter对象的配置解决,而通过Nginx配置解决,需要在location模块下,加入如下配置:
#允许跨域请求的域,*代表所有 add_header 'Access-Control-Allow-Origin' *; #允许带上cookie请求 add_header 'Access-Control-Allow-Credentials' 'true'; #允许请求的方法,比如 GET/POST/PUT/DELETE add_header 'Access-Control-Allow-Methods' *; #允许请求的header add_header 'Access-Control-Allow-Headers' *;
为了防止服务器资源被别人直接拿去引用,我们可以加入如下配置,防止恶意访问:
#对源站点验证 valid_referers *.a.com; #非法引入会进入下方判断 if ($invalid_referer) {
# 状态可以自定义,如下,当非*.a.com的站点访问时,返回404状态 return 404; }
OSI网络模型
网络模型OSI(open System Interconnect),开放网络互联。是一种网络互联模型,也是一种规范。
网络模型分为七层,用户从发起请求到服务器接收,会经过七道工序,这七层分别如下
第七层 | 应用层 | 与用户的行为交互,对应的是计算机里的软件 |
第六层 |
表示层 | 定义数据的格式,加密等,确保请求端的数据能被响应端识别 。例如,IBM主机使用EBCDIC编码,而大部分PC机使用的 是ASCII码。在这种情况下,便需要表示层来完成这种转换。 |
第五层 |
会话层 |
可以理解为session,请求的发送和接收响应的过程中存在会话,会话充当了过程的管理者,从会话的创建、维护到销毁。 |
第四层 | 传输层 | 该层建立了端到端的连接,他提供了数据传输服务,本层常见的协议:TCP\UDP\LVS |
第三层 | 网络层 | 网络通信时必须要有本机ip和对方ip,请求端和响应端都会有自己的ip.本层协议:IP |
第二次 | 数据链路层 | 本层会提供计算机的mac地址,通信的时候会携带,为了确保请求投递正确,请求响应的可靠性,本层会验证检测mac地址 |
第一层 | 物理层 | 端到端请求过程中的媒介,物理设备,如网线、路由器等。 |
keepalived的安装部署
简介:
keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
1.下载:
https://www.keepalived.org/download.html
wget -- no-check-certificate
https://www.keepalived.org/software/keepalived-2.2.7.tar.gz
2.解压:
tar -zxvf keepalived-2.2.7.tar.gz
3.创建安装目录
mkdir /usr/local/keepalived
4.安装依赖
yum -y install gcc-c++
yum install openssl openssl-devel
5.配置
./configure --prefix=/usr/local/keepalived --sysconf=/etc
6.编译安装
make && make install
7.修改配置
配置文件在 /etc/keepalived 下。
在/etc/keepalived 下复制配置文件
cp keepalived.conf.sample keepalived.conf
修改如下核心配置:
global_defs {
# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一
router_id keep_130
}
#定义keepalived节点,VI_1为节点名称
vrrp_instance VI_1 {
# 表示状态是MASTER主机还是备用机BACKUP
state MASTER
# 该实例绑定的网卡,可以通过 “ip addr”查看
interface ens33
# 保证主备节点一致即可
virtual_router_id 51
# 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 100
# 主备之间同步检查时间间隔,单位秒
advert_int 2
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1234
}
# 虚拟出来的ip,主备服务器配置一样的ip,可以有多个(vip)
virtual_ipaddress {
192.168.1.150
}
}
cp /usr/local/keepalived-2.2.7/keepalived/etc/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived-2.2.7/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
systemctl daemon-reload
systemctl stop keepalived.service
我们通过虚拟IP 192.168.1.150访问服务器时,会根据keepalived节点的权重映射到对应的服务器,当Master节点的nginx挂了,我们访问时,还是会连接到master节点(只有master的keepalived服务停了才会切到backup节点),为了达到高可用,可以通过如下脚本与监听的方式解决。
vim /etc/keepalived/check_nginx.sh
A=`ps -C nginx --no-header |wc -l`
# 判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
# 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
chmod +x /etc/keepalived/check_nginx.sh
配置keepalived监听脚本:
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_alive_or_not.sh"
interval 2 # 每隔两秒运行上一行脚本
weight 10 # 如果脚本运行成功,则升级权重+10
# weight -10 # 如果脚本运行失败,则升级权重-10
}
在vrrp_instance中新增监控脚本
track_script {
check_nginx_alive # 追踪 nginx 脚本
}
重启keepalived使配置生效
systemctl restart keepalived