美文网首页Nginx
七、防盗链和location指令详解

七、防盗链和location指令详解

作者: 胖虎喜欢小红 | 来源:发表于2020-01-10 18:36 被阅读0次

防盗链配置

nginx 防盗链问题

两个网站 A 和 B, B网站引用了A网站上的图片,这种行为就叫做盗链。 防盗链,就是要防止B引用A的图片。

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

ngx_http_referer_module

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

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

准备一张图片两台机器:
(图片放置在图片机器上)
图片:hello.jpg
图片机器:10.3.134.3
盗链机器:10.3.134.5

未防盗链时配置:

图片机器配置:
日志格式添加"$http_referer" 
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                         '$status $body_bytes_sent "$http_referer" '
                         '"$http_user_agent" "$http_x_forwarded_for"';
location {
            location ~ \.(png|css|jpg)$ {      #利用正则匹配图片
            root /opt/ ;                       #图片存放位置
}

重启服务

访问测试:浏览器输入 10.3.134.3/hello.jpg

盗链机器:

编辑一个静态网页  文件名自取,但是必须以.html结尾  这里文件名为 index.html
内容:
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <h1>hello</h1>
    <img src="http://10.3.134.3/king.jpg">  地址为图片机器的地址 加上图片位置的路由
  </head>
</html>

[root@biudefor ~]# vim /etc/nginx/nginx.conf
        location / {
            root   /opt/;      #路径自定义 将静态网页文件存放在这个目录里面
            index  index.html index.htm;
        }

重启服务

测试访问:浏览器输入  10.3.134.5
能访问到图片就OK

查看图片机器的日志:发现有一个新的访问

防盗链配置:

图片机器:
[root@biudefor]# vim /etc/nginx/nginx.conf
server {
    listen       80;
    server_name  localhost;
    location ~ \.(png|css|jpg)$ { 
        root /opt/ ;  
        valid_referers none blocked 10.3.134.3;  #允许访问的机器
            if ($invalid_referer) {
               return 403;
            }
     }
}
重启服务
直接访问图片机 :10.3.134.3/hello.jpg
访问正常 因为它符合none这个规则

访问盗链机:10.3.134.5   出现403
(如果使用浏览器访问时,第二次访问盗链机应先清除浏览器缓存,否则肯能会继续使用之前的缓存来进行访问,导致无法看见效果)

Nginx的localtion指令详解

Nginx 的 HTTP 配置主要包括三个区块,结构如下:

http {                      # 这个是协议级别
  include mime.types;
  default_type application/octet-stream;
  keepalive_timeout 65;
  gzip on;
    server {             # 这个是服务器级别
      listen 80;
      server_name localhost;
      location / {  # 这个是请求级别
        root html;
        index index.html index.htm;
      }
   }
}

1、location 区段

  • location 是在 server 块中配置,根据不同的 URI 使用不同的配置,来处理不同的请求。
  • location 是有顺序的,会被第一个匹配的location 处理。
  • 基本语法如下:
location [=|~|~*|^~|@] pattern{……}

2、location 前缀含义

=    表示精确匹配,优先级也是最高的 
^~   表示uri以某个常规字符串开头,理解为匹配url路径即可 
~    表示区分大小写的正则匹配  
~*   表示不区分大小写的正则匹配
!~   表示区分大小写不匹配的正则
!~*  表示不区分大小写不匹配的正则
/    通用匹配,任何请求都会匹配到
@    内部服务跳转

查找顺序和优先级

= 大于 ^~  大于 ~|~*|!~|!~* 大于 /
多个location配置的情况下匹配顺序为:首先匹配 =,其次匹配^~, 其次是按正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

3、location 配置示例
1、没有修饰符 表示:必须以指定模式开始

server {
    listen       80;
    server_name  localhost;

    location  /abc {
        root    /home/www/nginx;
        index   index.html;
        }
在/home/www/nginx下建立abc目录,将html文件放在里面
测试访问:
http://192.168.1.9/abc
如果访问报302或301访问时
http://192.168.1.9/abc/

2、=表示:必须与指定的模式精确匹配

server {
    listen       80;
    server_name  localhost;
   
    location / {
        root /usr/share/nginx/html;
        index a.html index.html;
    }
    location = / {
        root /usr/share/nginx/html;
        index b.html index.html;
    }
}

测试:
http://192.168.1.9
访问到a.html文件的内容
http://192.168.1.9/a.html
访问到b.html文件的内容

3、~ 表示:指定的正则表达式要区分大小写

server {
server_name localhost;
  location ~ /abc {
                root /home/www/nginx;
                index 2.html index.html;
        }
}
测试访问:
http://192.168.1.9/abc
不正确的
http://192.168.1.9/ABC
~ 需要区分大小写。而且目录需要根据大小写定义。

4、^~ :类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配,那么就停止搜索其他模式了。

5、@ :定义命名 location 区段,这些区段客户段不能访问,只可以由内部产生的请求来访问,如error_page等

location 区段匹配示例

location = / {
  # 只匹配 / 的查询.
  [ configuration A ]
}
location / {
  # 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。
  [ configuration B ]
}
location ^~ /images/ {
  # 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。匹配到第一个就停止
  [ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
  # 匹配任何以gif, jpg, or jpeg结尾的文件
  [ configuration D ]
} 
各请求的处理如下例:
    / → [configuration A]
    /documents/document.html → [configuration B]
    /images/1.gif → [configuration C]
    /documents/1.jpg → [configuration D]

相关文章

网友评论

    本文标题:七、防盗链和location指令详解

    本文链接:https://www.haomeiwen.com/subject/uacmactx.html