vlambda博客
学习文章列表

Nginx进阶、Keepalived认识、使用

Nginx进阶、Keepalived认识、使用

蓝色

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#!/bin/bashA=`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 fifi

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