Nginx学习 --- 防盗链与高可用集群

一. 防盗链
1. 防盗链概念
防盗链简单来说就是存在我们服务种的一些资源,只有我们规定的合法的一类人才能去访问,其他人就不能去访问的资源(如css,js,img等资源).
具体点就是用户发送请求给nginx服务器,nginx服务器根据请求去寻找资源,请求的比如说是有个index.html文件,这个文件中会包含很多js,css,img等资源,这些文件在这个骨架中会被二次请求,在第二次请求时,会在请求头部加上有个referer,这个referer只会在第二次请求时才会被加上. (referer表示第二次资源的来源地址).
2. Nginx防盗链的具体实现
valid_referers:nginx 会通过查看referer自动和valid_referers后面的内容进行匹配,如果匹配到了就$invaild_referer变量置0,如果没有匹配到,则将 $invaild_referer变量置为1,匹配的过程不区分大小写.

语法:vailad_referers none|blocked|server_names|string.
默认值: -
位置(可以书写的地方): server, location.

none: 如果header中的referer为空,允许访问.
blocked: 在header中的referer不为空,但是该值被防火墙或代理服务器进行伪装过,如不带"http://" , “https://” 等协议头的资源允许访问.
server_names: 指定具体的域名或IP.
配置:
进入配置文件进行配置.
这里主要是对一些图片资源进行防盗(下面有配置的详细说明).

location ~ .*\.(png|jpg|gif)$
   location:输入的url后面跟的路径,如果路径与location后的内容相匹配就执行location下的内容
   ~:开始正则匹配
   .*:.表示出换行符/n之外的所有字符,*就是匹配0次或多次。
   \.:\转译符号将具有特殊含义的字符,转为纯字符型,.这里有包含任意字符的意思,所以需要转译
   (png|jpg|gif)$:表示结尾要是以png、jpg、gif为结尾

vaild_referers none blocked www.baidu.com
   这个是如果返回的头部referer为www.baidu.com那么就不会执行valid_referer下面内容,反之就会

if ($invalid_referer)
   这个含义就是结合上面的valid_referer,如果请求头部为www.baidu.com,那么就$invalid_referer就会被赋值为0,就不会执行返回错误代码401,如果不是www.baidu.com,那么就会赋值为1,就会执行下面内容

return 401:返回错误代码401

其实配置到这一步已经完成了对于防盗链的配置.
提前准备好一张图片用来验证:
在这里插入图片描述
3. 验证和验证时的问题
配置好文件后 -s reload 一下服务.
然后开始验证.
在这里插入图片描述
我们不是明明对默认的html中文件进行了防盗的配置了吗, 那为什么我们直接输入ip和后面的以.jpg为结尾的路径还是会输出图片呢?为什么不是返回401报错呢?
解答:这里主要有两个原因:这种形式的访问是直接请求服务器中默认html中的1.jpg文件,是没有头部的(只有二次以上请求才会有referer头部),并且我们在配置文件中添加了[none]这个参数,它的含义就是当我们在没有头部referer时,依然能访问到文件,所以我们配置的防盗链在这个时候是不起作用的。
真正的验证
没有none的验证
如果我们把none参数去掉看一下效果就行了.
在这里插入图片描述
再访问一下,这就有防盗了.
在这里插入图片描述
这样也就能验证成功了.
加上none参数的验证
我们需要自己写一个或者复制html文件.
在这里插入图片描述

这里直接复制了index.html 中的文件,并在其中添加了图片路径.
在这里插入图片描述
看一下页面效果.
在这里插入图片描述
就是这样.
配置还是一开始的加none的那个.
在这里插入图片描述
我们去访问这个1.html文件时看一下效果(下图的开发者界面按"F12"就能出来)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
因为无法匹配到这个头部IP,所以就会报401的错误.
在这里插入图片描述
让我们报错时,不再是数字,而是这张图片.

配置文件在下面:
在这里插入图片描述
我们使用rewrite重定向,让它向我们返回这张图片:

rewrite ^/ /2.jpg
    
    rewrite:就是重定向url
        
    ^/:重定向到哪,^/表示所有
 
    /2.jpg:将什么重定向到哪

在访问一下,看一下之后的效果.
在这里插入图片描述

会发现我们新添的这张图,代替了先前图的位置.
到此这就是防盗链的东西了.

二. 高可用
1. 什么是nginx高可用?
只有一台nginx服务器时,如果nginx服务器挂掉了,那么请求就无法访问.
在这里插入图片描述
要实现高可用,那就可以部署多台nginx服务器,下面以两台nginx服务器为例,示意图如下:
在这里插入图片描述
要配置nginx集群,至少需要满足以下条件:
(1)需要两台nginx服务器.
(2) 需要keepalived.
(3)需要虚拟ip.
2.配置可用的Nginx集群
(1) 需要两台服务器 192.168.200.130 和 192.168.200.131
在这里插入图片描述
在这里插入图片描述
(2) 在两台服务器安装nginx
在这里插入图片描述
在这里插入图片描述
(3) 在两台服务器安装keepalived
在这里插入图片描述

yum install keepalived -y

安装之后,在etc里面生成目录keepalived, 有文件keepalived.conf .
(4)完成高可用配置(主从配置)
主服务器keepalived.conf 配置文件内容:

! Configuration File for keepalived
 
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.130
   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 MAXTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.100
    }
}

从服务器keepalived.conf配置文件内容:

! Configuration File for keepalived
 
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.131
   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.200.100
    }
}

在主从服务器的/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

把两台服务器上nginx 和 keepalived 启动。
启动nginx : ./nginx
启动 keepalived: ststemctl start keepalived.service.
在这里插入图片描述
查看keepalived 进程.
在这里插入图片描述

(5)最终测试
在浏览器地址栏输入虚拟ip地址192.168.200.100
在这里插入图片描述
能访问到nginx主页, 说明配置成功.
用ip a命令也可以看到,两台服务器都已经绑定了虚拟ip.
在这里插入图片描述
把主服务器( 192.168.200.130 ) nginx 和 keepalive 停止, 再输入 192.168.200.100 (虚拟ip).
在这里插入图片描述

再次查看进程
在这里插入图片描述

进程已经不存在了.
这时候再次访问虚拟ip.
在这里插入图片描述

这时候就是从服务器.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值