• nginx 动静分离 防盗链


    一、动静分离

    实质 :使用正则表达式,匹配过滤,交给不同的服务器

    优点 :把动态页面和静态页面分别由不同的服务器来解析,加快解析速度,降低单个服务器的压力

    环境准备

    静态资源配置(10.36.192.169)

    安装nginx

    echo '
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    
    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true ' > /etc/yum.repos.d/nginx.repo
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    yum clean all
    yum makecache
    yum repolist
    
    • 1
    • 2
    • 3
    yum install yum-utils
    yum -y install nginx
    
    • 1
    • 2

    修改配置文件

    vim /etc/nginx/conf.d/default.conf
    server {
            listen 80;
            server_name     localhost;
    
            location ~ \.(html|jpg|png|js|css|gif|bmp|jpeg) {
            root /usr/share/nginx/html;
            }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    重启nginx

    nginx -t
    nginx -s reload
    
    • 1
    • 2

    动态资源配置(192.168.20.135)

    yum安装php

    rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
    rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
    yum install php71w-xsl php71w php71w-ldap php71w-cli php71w-common php71w-devel php71w-gd php71w-pdo php71w-mysql php71w-mbstring php71w-bcmath php71w-mcrypt -y
    yum install -y php71w-fpm
    systemctl start php-fpm
    systemctl enable php-fpm
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    yum 安装nginx方法如上

    修改nginx配置文件

    vim /etc/nginx/conf.d/default.conf
    server {
            listen      80;
            server_name     localhost;
            location ~ \.php$ {
                root           /usr/local/nginx/html;  #指定网站目录
                fastcgi_pass   127.0.0.1:9000;    #指定访问地址
                fastcgi_index  index.php;		#指定默认文件
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; #站点根目录,取决于root配置项
                include        fastcgi_params;  #包含nginx常量定义
            		}
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    重启nginx

    nginx -t
    nginx -s reload
    
    • 1
    • 2

    nginx代理机配置(192.168.20.134)

    修改nginx子自配置文件

    vim /etc/nginx/conf.d/default.conf
    upstream static  {
      server 10.36.192.169   weight=1  max_fails=2  fail_timeout=2s;
    }
    upstream php {
      server 192.168.20.135   weight=2  max_fails=2  fail_timeout=2s;              
    }
    
    server {
    
       listen       80;
       server_name  localhost;
       location ~ \.php$ {
               proxy_pass http://php;
               proxy_set_header Host $host:$server_port;
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                   }
    location ~ .*\.(html|gif|jpg|png|bmp|swf|css|js)$ {
               proxy_pass http://static;
               proxy_set_header Host $host:$server_port;
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    重启nginx

    nginx -t
    nginx -s reload
    
    • 1
    • 2

    客户端访问

    在这里插入图片描述

    在这里插入图片描述

    当访问静态页面的时候location 匹配到 (html|jpg|png|js|css|gif|bmp|jpeg) 通过转发到静态服务器,静态服务通过location的正则匹配来处理请求。
    当访问动态页面时location匹配到 .php 结尾的文件转发到后端php服务处理请求。

    二、防盗链

    盗链 :两个网站A和B,A网站引用了B网站上的资源,这种行为叫做盗链

    防盗链 : 防止A引用B的资源

    nginx防止网站资源被盗用模块

    ngx_http_referer_module

    如何区分哪些是不正常的用户

    HTTP Referer是header的一部分,当浏览器向web服务器发送请求时,一般会带上Referer,告诉服务器我从那个页面链接过来,服务器借此可以获得一些信息用于处理,例如防止未经允许的网站盗链图片,文件等.因此HTTP Referer可以是通过程序来伪装生成的,所以通过Reterer信息防盗链并非100%可靠,它能够限制大部分的盗链情况

    盗链实验

    服务器1IP: 192.168.20.135 (正版网站)
    服务器2IP: 192.168.0.12

    在正版网站发布资源

    修改配置文件(发布图片1.jpg)
    [root@localhost ~]# vim /etc/nginx/conf.d/default.conf 
     
    server {
        listen  80;
        server_name  localhost;
        location /{
        root  /usr/share/nginx/html; #网站默认发布路径
         index  1.jpg;
        
    }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    重启nginx服务
    nginx -t
    nginx -s reload
    
    • 1
    • 2
    • 3

    浏览器访问

    在这里插入图片描述

    盗版网站盗用

    修改网站发布页面
    [root@daili ~]# cd /usr/share/nginx/html/ #yum安装nginx的默认发布路径
    [root@daili html]# vim index.html
    
    
            
        qf.com
    
         #背景为绿色
            #盗用171IP的1.jpg这个图片
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    浏览器访问盗版网站

    在这里插入图片描述

    观察正版服务器的日志

    在这里插入图片描述

    防盗链实验

    *服务器1IP: 192.168.20.135 (正版网站)
    服务器2IP: 192.168.0.12

    在这里插入图片描述

    none : 允许没有http_referer的请求访问资源

    blocked : 允许不是http://开头的,不带协议的请求访问资源;

    server_names : 只允许指定ip/域名来的请求访问资源(白名单)

    修改正版网站的子配置文件

    vim /etc/nginx/conf.d/default.conf 
     
    server {
        listen  80;
        server_name  localhost;
        location /{
        root  /usr/share/nginx/html;
         index  1.jpg;
    valid_referers  none  blocked www.baidu.com;   
     
    if ($invalid_referer) {
     return 502;             
    }
     
    }
    }
    
    重启服务
    nginx -t 
    nginx -s reload
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    开启防盗链
    因为我们在服务器上配置了防盗链所以访问做了盗链的ip图片加载不出来,并且状态码也是502在这里插入图片描述

    none字段

    无none访问正版网站,也就是Referer为空,访问不到正版服务器的资源

    server {
    
       listen       80;
       server_name  localhost;
    
    location / {
            root   /usr/share/nginx/html;
            index  1.jpg;
    
           valid_referers   blocked   192.168.0.12;
                 if ($invalid_referer) {
                      return 502;
                  }
           }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述
    有none访问正版网站
    在这里插入图片描述
    在这里插入图片描述

    server_name字段

    如果在服务器上将做了盗链的机器ip写入白名单(server_names),这样就可以访问到了,状态码为200

    server {
    
        listen       80;
        server_name  localhost;
    
    location / {
             root   /usr/share/nginx/html;
             index  1.jpg;
    
            valid_referers  none blocked   192.168.0.12;
                  if ($invalid_referer) {
                       return 502;
                   }
            }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

  • 相关阅读:
    左神算法(二)
    TensorFlow搭建LSTM实现多变量输入多变量输出时间序列预测(多任务学习)
    Redis 有序集合 zset ( sorted set )
    VS Code 远程连接Linux开发环境
    景联文科技助力金融机构强化身份验证,提供高质量人像采集服务
    OceanBase 系统架构初探
    git强制删除本地分支 git branch -D
    FreeRTOS的学习(二)——队列的介绍和操作
    数据结构线性表
    磁盘和文件系统管理(一)
  • 原文地址:https://blog.csdn.net/2301_78315274/article/details/133996953