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
    
        正則表達式

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息