当前位置: 首页 > article >正文

nginx 动静分离 防盗链

  • 一、动静分离
    • 环境准备
    • 静态资源配置(10.36.192.169)
      • 安装nginx
      • 修改配置文件
      • 重启nginx
    • 动态资源配置(192.168.20.135)
      • yum安装php
      • 修改nginx配置文件
      • 重启nginx
    • nginx代理机配置(192.168.20.134)
      • 修改nginx子自配置文件
      • 重启nginx
    • 客户端访问
  • 二、防盗链
    • nginx防止网站资源被盗用模块
    • 如何区分哪些是不正常的用户
    • 盗链实验
      • 在正版网站发布资源
      • 浏览器访问
      • 盗版网站盗用
      • 浏览器访问盗版网站
    • 观察正版服务器的日志
    • 防盗链实验
      • 修改正版网站的子配置文件
      • none字段
      • server_name字段

一、动静分离

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

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

环境准备

静态资源配置(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
yum clean all
yum makecache
yum repolist
yum install yum-utils
yum -y install nginx

修改配置文件

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;
        }
}

重启nginx

nginx -t
nginx -s reload

动态资源配置(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

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常量定义
        		}
        }

重启nginx

nginx -t
nginx -s reload

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;

}
}

重启nginx

nginx -t
nginx -s reload

客户端访问

在这里插入图片描述

在这里插入图片描述

当访问静态页面的时候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;
    
}
}
重启nginx服务
nginx -t
nginx -s reload

浏览器访问

在这里插入图片描述

盗版网站盗用

修改网站发布页面
[root@daili ~]# cd /usr/share/nginx/html/ #yum安装nginx的默认发布路径
[root@daili html]# vim index.html
<html>
<head>
    <meta charset="utf-8">    
    <title>qf.com</title>
</head>
<body style="background-color:green;">     #背景为绿色
    <img src="http://192.168.20.135/1.jpg"/>    #盗用171IP的1.jpg这个图片
</body>
</html>

浏览器访问盗版网站

在这里插入图片描述

观察正版服务器的日志

在这里插入图片描述

防盗链实验

*服务器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

开启防盗链
因为我们在服务器上配置了防盗链所以访问做了盗链的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;
              }
       }
}

在这里插入图片描述
有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;
               }
        }
}

在这里插入图片描述


http://www.kler.cn/a/107178.html

相关文章:

  • 性能优化、安全
  • MySql结合element-plus pagination的分页查询
  • HarmonyOS Next星河版笔记--界面开发(4)
  • 网络远程操控
  • 基于matlab的CNN食物识别分类系统,matlab深度学习分类,训练+数据集+界面
  • 16008.行为树(五)-自定义数据指针在黑板中的传递
  • 先讲结论、逻辑先行,6个必备的职场技能
  • Ubuntu安装AdGuardhome(树莓派安装AdGuardhome)
  • Centos7 部署 Stable Diffusion
  • JS实现商品SKU
  • Unity地面交互效果——1、局部UV采样和混合轨迹
  • (免费领源码) Asp.Net#SQL Server校园在线投票系统10557-计算机毕业设计项目选题推荐
  • Windows11搭建kafka-python环境
  • 【C程序设计】用心浇灌<C程序>
  • 软考高级之系统架构师之软件工程
  • c++ qt连接操作sqlite
  • 综合性练习
  • 【开源】基于SpringBoot的城市桥梁道路管理系统的设计和实现
  • Java练习题2020-3
  • 5.OsgEarth加载地形
  • Go 实现选择排序算法及优化
  • 使用了百度OCR,记录一下
  • 经典目标检测神经网络 - RCNN、SSD、YOLO
  • LVS-keepalived实现高可用
  • p5.js 视频播放指南
  • 【C++初探:简单易懂的入门指南】一