nginx.conf-----rewrite

nginx-rewrite
    支持url重写、if条件判断,不支持else。
    模块:ngx_http_rewrite_module,须要PCRE库支持(源码安装)

指令执行顺序:
    一、执行server{}块中的rewrite;
    二、执行location匹配;
    三、执行选定的location中的rewrite;
        #其中某处URI被重写,则从新循环执行1-3,直到找到真实存在的文件。
        #若是循环超过10次,则返回500 Internal Server Error错误。

指令
    break:中止执行当前虚拟主机的后续rewrite指令集;
           做用域:server、location、if
        例:
        if ($slow) {
            limit_rate 10k;
             break;
        }

    if(condition){...}:对给定的条件进行判断。结果为真,则执行{}中的指令集,做用域:server、location
        codition内容:
            变量名:变量是空字符串或以0开始的字符串,则为false
            =、!=:比较变量和字符串
            ~、~*:与正则表达式匹配的变量,若是表达式中有“}”,则整个表达式要用"或'包围
            -f,!-f:检查一个文件是否存在
            -d,!-d:检查一个目录是否存在
            -e,!-e:检查一个文件、目录、符号连接是否存在
            -x,!-x:检查一个文件是否可执行

        例:
        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;
        }

        if($invalid_referer){
            return 403;
        }
        #请求参数中的变量
    
    return:中止处理并返回指定状态码(code)给客户端,非标准状态码444表示关闭链接且不给客户端响应头;
        做用域:server、location、if。
        语法:return code;
        #支持响应URL重定向(30一、30二、30三、307),或者文本响应;文本或URL重定向能够包含变量。
    
    rewrite regex replacement [flag]:若是URI匹配指定的正则表达式regex,URI就会被replacement重写;
            #replacement以"http://"或"https://"开始,将再也不继续处理,重定向将返回客户端。
        return按照配置中出现的顺序执行。
        flag标志:中止继续处理。
          参数:
            last:中止处理后续rewrite,而后对重写的URI在rewrite指令上从新查找;
            break:中止处理后续rewrite,并再也不从新查找。但当前location内剩余非rewrite和location外的非rewrite语句能够执行;
            redirect:replacement不是以http://或https://开始,返回302临时重定向;
            permant:返回301永久重定向。
        #完整重定向URL:scheme(http://、https://)+server_name_in_redirect+port_in_redirect
                http协议+域名+端口

        例:
        server {
            rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 last;
            return 403;
        }
            #若是rewrite放在location下,使用last将循环10次匹配,而后返回500错误;可使用break。

        rewrite ^/users/(.*)$ /show?user=$1? last;
            #自定义参数user=$1,最后带?,将不会带原有的请求参数。
            #重定向的URL包含原有请求的参数,原URL的?后的内容。

    rewrite_log on|off:开启或关闭以notice级别打印rewrite处理日志到error_log文件。
        例:rewrite_log on;            #打开rewrite日志
           error_log logs/xxx.error.log notice; #将error log的级别调到notice

    set variable value:定义一个变量并赋值,值能够为文本、变量、文本变量混合体。

    uninitialized_variable_warm on|off:控制是否输出为初始化的变量到日志。  #默认为onnginx

    valid_referers none|blocked|server_names|string ...:防盗链
        none:无referer值的状况
        blocked:referer值被防火墙进行假装
        server_names:设置一个或多个URL,检测referer头的值是不是URL中的某个,能够用“*”统配符
            #$invalid_referer:匹配到为0,不然为1;
        例:
        valid_referers none;
        if ($invalid_referer) {
            rewrite ^/ http://****.com/ redirect;
        }    #未匹配到值,执行rewrite
    
        正则表达式

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息