nginx重写与防盗链

一、ngx_http_rewrite_module作用:

  用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的链接,就可以设置为自动访问

二、ngx_http_rewrite_module模块指令:

  1. if 指令:

    用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置,可以配置在server或location块中进行配置,Nginx的if语法仅能使用if做单次判断,不支持使用if else或者if elif这样的多重判断

      1.1 格式:

if (条件匹配) {   
 action
}

    1.2 判断:

  = #比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false
  !=  #比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false
  ~ #区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
  !~ #区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假

  ~* #不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
  !~* #不区分大小字符,判断是否匹配,满足匹配条件为假,不满足匹配条件为真


  -f 和 !-f #判断请求的文件是否存在和是否不存在
  -d 和 !-d #判断请求的目录是否存在和是否不存在
  -x 和 !-x #判断文件是否可执行和是否不可执行
  -e 和 !-e #判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)

   1.3 示例:

server{
  listen 80;
  listen 443 ssl;
   ssl_certificate /apps/nginx/conf.d/ssl/www.wzw.com.crt;
   ssl_certificate_key /apps/nginx/conf.d/ssl/www.wzw.com.key;
   ssl_session_cache shared:sslcache:20m;
   ssl_session_timeout 10m;
  server_name www.wzw.com;
  root /apps/nginx/html;

location /main {
     index index.html;
     default_type text/html;
     if ( $scheme = http ){
       echo "if-----> $scheme";     使用什么协议输出对应协议,需要证书哦
}
      if ( $scheme = https ){
       echo "if ----> $scheme";
   }
}
}

    2. return:

   return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置都将不被执行,return可以在server、if 和 location块进行配置

    2.1 格式:

    www.kgc.com/test/
   404
   return code; #返回给客户端指定的HTTP状态码
   return code [text]; #返回给客户端的状态码及响应报文的实体内容,可以调用变量,其中text如果有空格,需要用单或双引号
   return code url; #返回给客户端的URL地址  

    2.2 示例:


location /test {
        default_type text/plain;
        return 302 http://www.baidu.com;
}


location /testt {
        default_type text/plain;
        return 301 http://www.wzw.com/pc;
}

301 缓存在磁盘上,建议使用301
302 没有缓存 , 服务器断开无法重定向

nginx重写与防盗链_第1张图片

nginx重写与防盗链_第2张图片

 3. rewrite :

  3.1  格式:

rewrite regex               replacement(www.baidu.com)        [flag];
        正则匹配原始访问url    替代你想让客户访问的               标志  ()premanent301 

  3.2 flag标记说明:

  • permanent :返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。
  • redirect :返回302临时重定向,浏览器地址会显示跳转后的URL地址。
  • break :本条规则匹配完成即终止,不再匹配后面的任何规则,且URI不会发生变化。
  • last :本条规则匹配完成后,继续向下匹配新的location URI规则。

   3.3 示例:


server{
  listen 80;
  listen 443 ssl;
## 监听443
  ssl_certificate /apps/nginx/conf.d/ssl/www.wzw.com.crt;
## 指向包含当前虚拟主机和CA的两个证书信息的文件
 
  ssl_certificate_key /apps/nginx/conf.d/ssl/www.wzw.com.key;
## 当前虚拟主机使用的私钥文件,一般是key文件
 
  ssl_session_cache shared:sslcache:20m;
## 在各worker之间使用一个共享的缓存,需要定义一个缓存名称和缓存空间大小,一兆可以存储4000个会话信息,多个虚拟主机可以使用相同的缓存名称
 
  ssl_session_timeout 10m;
## 客户端连接可以复用ssl session cache中缓存的有效时长
  server_name www.wzw.com;
  root /apps/nginx/html/;
 
location / {
  root /apps/nginx/html;
  if ( $scheme = http ){
  rewrite ^/(.*)$ https://www.wzw.com/$1 redirect;  ##302跳
## 当$scheme为http时,重写为https  ^/(.*)$以/后所有   $1后向引用
 
}
}
}

三、防盗链:

    防盗链基于客户端携带的referer实现,referer是记录打开一个页面之前记录是从哪个页面跳转过来的标记信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗链,referer就是之前的那个网站域名。

  1. valid_referers  信息分类:

  1. none:#请求报文首部没有referer首部,比如用户直接在浏览器输入域名访问web网站,就没有referer信息。
  2. blocked:#请求报文有referer首部,但无有效值,比如为空。
  3. server_names:#referer首部中包含本主机名及即nginx 监听的server_name。
  4. arbitrary_string:#自定义指定字符串,但可使用*作通配符。示例: *.kgc.org www.kgc.*
  5. regular expression:#被指定的正则表达式模式匹配到的字符串,要使用~开头,例如:~.*\.kgc\.com

   2.盗链示例:

     2.1.服务器配置:

把图片放到/apps/nginx/html 下


vim   /apps/nginx/conf.d/www.conf 

server{
        listen 80;
        server_name  www.wzw.com;
        root    /apps/nginx/html;
 
}

  2.2 小偷服务器配置:

192.168.88.101机器:

systemctl start nginx     
systemctl  stop firewalld
setenforce 0

vim /apps/nginx/html/index.html

  
  
  

this is yunjisuan

##盗取www.wzw.com的图片 vim /apps/nginx/conf/nginx.conf server_name www.dsj.com ##基于域名的服务名称 vim /etc/hosts 192.168.88.100 www.wzw.com ##域名解析

   2.3  客户端配置:

     C:\Windows\System32\drivers\etc\host

     打开添加  www.dsj.com 的IP地址。

     192.168.88.101  

真机测试:

nginx重写与防盗链_第3张图片

3. 设置防盗链:

  3.1 服务器添加防盗链:

server块中添加防盗链:

vim /apps/nginx/conf.d/www.conf

location ~* \.(jpg|png|gif|swf|jpeg|bmp)$ {
  root /apps/nginx/html;
  valid_referers none blocked *.wzw.com wzw.com;
  if ( $invalid_referer ) {
  return  403;
}
}

   这时客户端再次访问盗图服务器时,图片会报403

nginx重写与防盗链_第4张图片

 

你可能感兴趣的:(nginx,运维)