首页 > 技术文章 > nginx之rewrite及防盗链

dongzhanyi123 2019-12-22 22:38 原文

rewrite示例-自动跳转https

示例1:自动把首页的http转化成https
location / {
       root /data/nginx/pc/html;
       index index.html;
       if ( $scheme = http ) {
           rewrite / https://www.xxxpc.net/;    
       }
   }
当你访问网站首页时,进行判断;当协议是http时,则进行rewrite重写把http://www.xxxpc.net重写成https://www.xxxpc.net;rewrite必须写在判断里面,如果不加判断条件,把http转化成https之后,还会继续循环,继续把https还转换至https;如此循环10次,直到浏览器显示重定向过多,进行报错为止

示例2:当进入登录界面时,自动跳转为https
location /login {
       root /data/nginx/pc/html;
       index index.html;
       if ( $scheme = http ) {
           rewrite / https://www.xxxpc.net/login permanent;
       }
       auth_basic "input password";
       auth_basic_user_file /apps/nginx/conf/.htpasswd;
   }
必须先把http转换成https之后,才可以出现登录界面,这样输入的用户名和密码才是加密的;判断必须在认证用户名密码之前进行判断重写

rewrite判断文件是否存在

location / {
       root /data/nginx/pc/html;
       index index.html;
       if ( !-f $request_filename ) {
           rewrite (.*) http://www.xxxpc.net/index.html;
       }
   }
当访问网站/下的资源时先做判断,如果访问/下的资源不存在,则自动重写到网站的首页

Nginx防盗链

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

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

基于访问安全考虑,nginx支持通过ungx_http_referer_module模块检查访问请求的referer信息是否有效实现防盗链功能
location /images {
       root /data/nginx/pc;
       valid_referers none blocked server_names ~\.google\. *.baidu.com *.biying.com;  #当访问/images下的资源时,只有指定的这些才可以访问
       if ( $invalid_referer ) {     #如果访问资源的网站不是从上面指定的搜索引擎跳转过来的,则拒绝访问,并且返回状态码403
           return 403;
       }
   }
盗链是被人网站的资源不是指定的他本地资源,而是指定的是其他人网站的链接,占用别人的存储和带宽为自己办事;通过referer来判断,referer是指从哪个网站跳转过来的;如果是百度的话,说明他是百度搜索本域名过来,是合法的;如果没有referer信息,说明他是用浏览器输入域名访问的,也是合法的;如果是从一个未知的网站跳转过来的,就说明是盗链资源,可以通过referer信息判断,然后再进行相关的配置操作。
防盗链一般用于/images(存放图片)和/static(存放静态资源)这两个location中。

推荐阅读