翼度科技»论坛 云主机 服务器技术 查看内容

nginx实现重写功能和防盗链功能

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
重写功能 rewrite

Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求,此功能依靠 PCRE(perl compatible regular expression),因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之
一,用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的链接,就可以设置为自动访问,另外还可以在一定程度上提高网站的安全性。

ngx_http_rewrite_module模块指令


if指令

用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置,可以配置在server或location块中进行配置,Nginx的if语法仅能使用if做单次判断,不支持使用if else或者if elif这样的多重判断,用法如下:
  1. if (条件匹配) {   
  2. action
  3. }
复制代码
官方文档
  1. https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#if
复制代码
实际操作 用户访问的文件不存在 直接返回主页


return

return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置都将不被执行,return可以在server、if 和 location块进行配置
语法格式:
  1. www.kgc.com/test/
  2. 404
  3. return code; #返回给客户端指定的HTTP状态码
  4. return code [text]; #返回给客户端的状态码及响应报文的实体内容,可以调用变量,其中text如果有空格,需要用单或双引号
  5. return code url; #返回给客户端的URL地址   
复制代码
例子:
  1. server {
  2.     listen 80;
  3.     server_name www.kgc.com;
  4.     root /data/nginx/pc/;
  5.         location /{
  6.         root /data/nginx/pc/;

  7. }
  8.   location /test {      #访问test 直接返回403
  9.         return 403;         #可以改成666   
  10.   }

  11. }
复制代码
set


    1. set
    复制代码
    指令用于设置变量值。
  • 这些变量可以在后续的请求处理过程中使用。
  • 例如,
    1. set $variable_name "value";
    复制代码
    将创建一个名为
    1. $variable_name
    复制代码
    的变量并为其赋值
    1. "value"
    复制代码


break


    1. if
    复制代码
    指令块内,
    1. break
    复制代码
    用于停止执行当前
    1. if
    复制代码
    块中的后续指令,并继续处理请求。
    1. rewrite
    复制代码
    指令的上下文中,
    1. break
    复制代码
    指令并不常用,因为
    1. rewrite
    复制代码
    指令本身在每次重写后都会终止当前指令集的处理(除非使用了
    1. last
    复制代码
    1. break
    复制代码
    标志的
    1. rewrite
    复制代码
    指令)。
  1. if ($slow) {
  2.    limit_rate 10k;
  3.    break;
  4. }
  5. location /main {
  6.    root /data/nginx/html/pc;
  7.    index index.html;
  8.    default_type text/html;
  9.     set $name kgc;
  10.     echo $name;
  11.    break;  #location块中break后面指令还会执行
  12.     set $my_port $server_port;
  13.     echo $my_port;
  14. }
复制代码
rewrite

通过正则表达式的匹配来改变
  1. URI
复制代码
,可以同时存在一个或多个指令,按照顺序依次对URI进行匹配,
  1. rewrite
复制代码
主要是针对用户请求的
  1. URL
复制代码
或者是
  1. URI
复制代码
做具体处理
rewrite可以配置在 server、location、if
  1. rewrite可以配置在 server、location、if
  2. 语法格式 :
  3. rewrite regex               replacement(www.baidu.com)        [flag];
  4.         正则匹配原始访问url    替代你想让客户访问的                   标志  ()premanent301   redirect302  break  last
复制代码
注意:如果在同一级配置块中存在多个rewrite规则,那么会自上而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]所表示的标志位用于控制此循环机制如果替换后的URL是以http://或https://开头,则替换结果会直接以重定向返回给客户端, 即永久重定向 301
  1. #访问  bj   跳转到  beijing  
  2. location /bj {
  3.    root /data/nginx/pc;   
  4.    rewrite ^/bj/(.*)    /beijing/$1   permanent;

  5. }
复制代码
防盗链

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

服务器1上有一张图片
服务器二将资源路径设置为服务器1从而达到白嫖的目的




实现防盗链

第一胎服务器
  1. vim   /apps/nginx/conf.d/pc.conf
  2. server{
  3.         listen 80;/
  4.         server_name  www.pc.com;
  5.         root    /data/nginx/pc;
  6.         location  / {
  7.         root  /data/nginx/pc;
  8. }
  9.         location ~* \.(jpg|gif|swf|jpeg|bmp)$ {     #匹配到jpg|gif|swf|jpeg|bmp 结尾的
  10.          root  /data/nginx/pc;    根目录
  11.          valid_referers none blocked *.pc.com pc.com; #定义白名单 允许谁跳转过来访问
  12.          if ( $invalid_referer ) {      #不在名单里 返回403
  13.            return   403;
  14.         }
  15.         }
  16. }
  17. }
  18. cd  /data/nginx/pc/
复制代码
以上就是nginx实现重写功能和防盗链功能的详细内容,更多关于nginx重新和防盗链的资料请关注脚本之家其它相关文章!

来源:https://www.jb51.net/server/322298r4n.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具