• Nginx之防盗链及高可用解读


    目录

    防盗链解读

    盗链是什么?

     Nginx中配置防盗链

    高可用解读 

    Keepalived

    Nginx中配置高可用 


    防盗链解读

    盗链是什么?

    网页的加载顺序是先加载HTML相关的内容,然后解析HTML的内容,那些需要加载图片,那些需要加载文件,是逐步加载的,对于我们线上的图片等静态资源,经常会被其他网站盗用,外面可以我们请求到一个页面后,这个页面一般会再去请求其中的静态资源,这时候请求头中,会有一个refer字段,表示当前这个请求的来源,我们可以限制指定来源的请求才返回,否则就不返回,这样可以防止资源被盗用。

    Referer理解 
            HTTP 协议中有一个用来表示“页面或资源”来源的“请求头”,这个请求头叫做 Referer --> Referer是表示请求是从哪个网址发出的
            防盗链功能基于HTTP协议支持的 Referer 机制,通过Referer跟踪来源,对来源进行识别和判断

     Nginx中配置防盗链

    valid_referers none|server_name

    设置有效的refer值

    • none:检测地址没有refer,则有效
    • server_name:检测主机地址,refer显示是从这个地址来的,则有效(server_name必须是完整的http://xxxx

    注意:if ($invalid_referer)中if后有个空格,不写就会报错

    1. nginx: [emerg] unknown directive "if($invalid_referer)" in
    2. /usr/local/nginx/conf/nginx.conf:27

    这里设置nginx服务器中的img目录下的图片必须refer为http:192.168.174/134才能访问 

    1. server {
    2. listen 80;
    3. server_name localhost;
    4. location / {
    5. proxy_pass http://xxx;
    6. }
    7. location /img{
    8. valid_referers http:192.168.174/134;
    9. if ($invalid_referer){#无效的
    10. return 403;#返回状态码403
    11. }
    12. root html;
    13. index index.html index.htm;
    14. }
    15. error_page 500 502 503 504 /50x.html;
    16. location = /50x.html {
    17. root html;
    18. }
    19. }
    • 如果引用这张图片的页面且对应refer并没有被设置,图片无法加载出来
    • 如果直接访问图片地址,因为没有refer字段指向来源,会直接显示Nginx的页面

    使用 curl 测试防盗链

    1. 1.# 安装 curl 命令
    2. yum -y install curl
    3.  
    4. 2.# 测试,在 103 机器中访问 101
    5. curl -I http://192.168.44.101/img/logo.png
    6.  
    7. -I:不带 Referer ,只是给我们返回响应的一些头信息。
    8.  
    9. curl -e "http://baidu.com" -I http://192.168.44.101/img/logo.png
    10.  
    11. -e:"http://baidu.com" 为 Referer,返回响应的一些头信息

    设置盗链图片

    将提示图片放在html/img/x.png,访问设置防盗链图片时,就返回这x.png张图

    1. location /img{
    2. valid_referers http:192.168.174/134;
    3. if ($invalid_referer){#无效的
    4. rewrite ^/ /img/x.png break;
    5. }
    6. root html;
    7. index index.html index.htm;
    8. }

    高可用解读 

    高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间

    Nginx的高可用指的是在一台Nginx宕机的情况下有其他Nginx去处理请求。

    Keepalived

    • Keepalived是Linux下一个轻量级别的高可用解决方案,通过虚拟路由冗余协议来实现服务或者网络的高可用
    • 起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态
    • 如果某个服务器节点出现故障,Keepalived将检测到后自动将节点从集群系统中剔除
    • 而在故障节点恢复正常后,Keepalived又可以自动将此节点重新加入集群中
    • 这些工作自动完成,不需要人工干预,需要人工完成的只是修复出现故障的节点

    如果 nginx master 出现宕机,keepalived则会将服务切到 nginx slave上,保证业务不受影响,这样就可以避免 nginx 单机故障问题,以此来实现高可用

    Nginx中配置高可用 

    安装keepalived

    yum install -y keepalived
    

    修改keepalived配置

    • 配置文件在/etc/keepalived/keepalived.conf
    • vrrp_instanceauthenticationvirtual_router_idvirtual_ipaddress这几个一样的机器,才算是同一个组里。这个组才会选出一个作为Master机器

    这里我们设置两台机器,分别下载好keepalived,然后进行配置

    机器一:

    1. ! Configuration File for keepalived
    2. global_defs {
    3. router_id lb1 # 名字与其他配置了keepalive的机器不重复就行
    4. }
    5. vrrp_instance heyingjie {#vrrp实例名可以随意取
    6. state MASTER #只能有一个默认的Master,其他写BACKUP
    7. interface ens33 # ip addr查看下网卡名,默认时ens33
    8. virtual_router_id 51
    9. priority 100 # 多台安装了keepalived的机器竞争成为Master的优先级
    10. advert_int 1 #通信时间
    11. authentication {
    12. auth_type PASS
    13. auth_pass 1111
    14. }
    15. virtual_ipaddress {
    16. 192.168.200.16 #虚拟IP
    17. }
    18. }

    机器二:

    1. ! Configuration File for keepalived
    2. global_defs {
    3. router_id lb2
    4. }
    5. vrrp_instance heyingjie {
    6. state BACKUP #只能有一个默认的Master,其他写BACKUP
    7. interface ens33
    8. virtual_router_id 51
    9. priority 50
    10. advert_int 1
    11. authentication {
    12. auth_type PASS
    13. auth_pass 1111
    14. }
    15. virtual_ipaddress {
    16. 192.168.200.16 #虚拟IP
    17. }
    18. }

    通过命令ip addr查看机器一的ip信息,可以看到虚拟IP

    image-20220503175414858

  • 相关阅读:
    TI/德州仪器 TS5A3157DBVR 模拟开关
    CPG 固体支持物研究:Lumiprobe通用 CPG II 型
    关于 Cesium 的笔记 (小白学习哈)
    力扣栈队列篇
    webpack入门总结
    《MySQL》数据类型与表操作
    2023 山东省赛 【9.28训练补题】
    21.Redis系列之缓存穿透、击穿、雪崩
    Android 9.0 ~ 12 获取系统内存大小、存储空间大小
    linux系统部署微服务项目
  • 原文地址:https://blog.csdn.net/m0_62436868/article/details/132802437