美文网首页
Nginx (四)

Nginx (四)

作者: 不知岁月惜 | 来源:发表于2017-11-05 21:15 被阅读0次
    一、ngx_http_rewrite_module
    将用户请求的URI基于PCRE regex所描述的模式进行检查,而后完成重定向替换
    
    1、 rewrite regex replacement [flag]
    2、 return 
    3、 rewrite_log on | off;
    4、 set $variable value;
    5、 if (condition) { ... }
    
    二、ngx_http_referer_module
    1、 valid_referers none|
    
    一、ngx_http_rewrite_module
    The ngx_http_rewrite_module module is used tochange request URI using PCRE regular expressions,
    return redirects, and conditionally select configurations.
    将用户请求的URI基于PCRE regex所描述的模式进行检查,而后完成重定向替换
    
    示例:
    http://www.a.com/hn--> http://www.a.com/henan
    http://www.a.com--> https://www.a.com/
    

    1、 rewrite regex replacement [flag]

    将用户请求的URI基于regex所描述的模 式进行检查,匹配到时将其替换为replacement指定的新的URI
    注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查隐含有循环机制,但不超过10次;
    如果超过,提示500响应码, [flag]所表示的标志位用于控制此循环机制
    如果replacement是以http://或https://开头,则替换结果会直接以重向返回给客户端301:永久重定向

     [flag]:
    last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环
    break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;
    结束循环,建议在location中使用
    redirect:临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;
    不能以http://或https://开头,使用相对路径,状态码: 302
    permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求,状态码:301
    

    zz页面跳转到zhengzhou

    临时重定向

    永久重定向

    location /zz 也可以针对zz uri做访问控制 访问zz目录旧跳转到zhengzhou目录下,内容更清晰作用根上面一样

    2、 return  
    作用域:server,location,if
    return code [text];
    return code URL;
    return URL;
    停止处理,并返回给客户端指定的响应码
    
    3、 rewrite_log on | off;
    是否开启重写日志, 发送至error_log( notice level)
    
     4、 set $variable value;
    用户自定义变量
    注意:变量定义和调用都要以$开头
    
    5、 if (condition) { ... }
    引入新的上下文,条件满足时,执行配置块中的配置指令; server, location
    condition:
    比较操作符:
    == 相同
    != 不同
    ~:模式匹配,区分字符大小写
    ~*:模式匹配,不区分字符大小写
    !~:模式不匹配,区分字符大小写
    !~*:模式不匹配,不区分字符大小写
    文件及目录存在性判断:
    -e, !-e 存在(包括文件,目录,软链接)
    -f, !-f 文件
    -d, !-d 目录
    -x, !-x 执行
    if指令实例
    
    if ($http_user_agent ~ MSIE) {             
    rewrite ^(.*)$ /msie/$1 break;
    }
    if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
         set $id $1;
     }
    if ($request_method = POST) {
         return 405;
     }
     if ($slow) {
         limit_rate 10k;
     }
    

    当访问admin目录时候系统就会返回403和disallow(返回可自定义)

    跳转到别的url www.baidu.com

    添加状态码跳转

    显示302临时跳转

    二、ngx_http_referer_module

    通常用于阻挡来源非法的域名请求.我们应该牢记,伪装Referer头部是非常简单的事情,所以这个模块只能用于阻止大部分非法请求.我们应该记住,有些合法的请求是不会带referer来源头部的,所以有时候不要拒绝来源头部(referer)为空的请求.
    The ngx_http_referer_module module is used to block access to a site for requests with invalid values in the
    “Referer” header field. 可防止盗链

    1、 valid_referers none|blocked|server_names|string ...;
    定义referer首部的合法可用值,不能匹配的将是非法值
    none:请求报文首部没有referer首部
    blocked:请求报文有referer首部,但无有效值
    server_names:参数,其可以有值作为主机名或主机名模式  本网站
    arbitrary_string:任意字符串,但可使用*作通配符
    regular expression:被指定的正则表达式模式匹配到的字符串,要使用~开头,例如: ~.*\.magedu\.com
    
    示例:
    valid_referers none block server_names *.a.com *.a.com a.* a.* ~\.baidu\.;
    if ($invalid_referer) {
    return 403 http://www.a.com; 
    }
    

    首部添加从哪里跳转过来的

    a页面跳转到b页面

    vim index.html website B

    nginx -s reload

    点击www.b.com会看到b.com的文件内容website B

    可以从日志看到跳转信息
    cd /var/log/nginx
    a.com代表从哪里位置跳转


    b.com也可以盗用a.com目录下的a.jpg图片

    vim b.html 编写website2目录下的页面

    打开b.com显示的图片确是a.com的图片,在用户层面也不知道,对a.com来说消耗了它的带宽来为b.com服务

    盗链成功

    日志查询可以看到从b.com下载的a.jpg

    nginx日志都储存在一起,不容易找到可以给文件设置独立存储

    第一个日志上会看到图片被转发到哪个网址上面,b.com就是盗链网站
    第二个日志是a.com本机正常访问,被转发位置正常是为空

    如何防止referers盗链
    允许请求
    none:请求报文首部没有referer首部
    blocked:请求报文有referer首部,但无有效值
    server_names:参数,其可以有值作为主机名或主机名模式 本网站
    包含baid字符的域名也允许
    if.......非法的403,转跳到www.a.com(可自定义网站)

    访问www.b.com/b.html 盗链a.com内容已经无法打开,F12可以看到403

    相关文章

      网友评论

          本文标题:Nginx (四)

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