nginx location 語法規則

語法規則: location [=|~|~*|^~] /uri/ { … }
=   #開頭表示精確匹配
^~  #開頭表示uri以某個常規字符串開頭,理解爲匹配 url路徑即可。nginx不對url做編碼,因此請求爲/static/20%/aa,可以被規則^~ /static/ /aa匹配到(注意是空格)。
~   #開頭表示區分大小寫的正則匹配
~*  #開頭表示不區分大小寫的正則匹配
/   #通用匹配,任何請求都會匹配到
!~和!~* #分別爲區分大小寫不匹配及不區分大小寫不匹配 的正則
@   # "@"定義一個命名的location,使用在內部定向時

多個location配置的情況下匹配順序爲(可能不是太準確):
首先匹配 =,其次匹配^~, 其次是按文件中順序的正則匹配,最後是交給 / 通用匹配。當有匹配成功時候,停止匹配,按當前匹配規則處理請求。

例子,有如下匹配規則:

    location = / {  
       #規則A  
    }  
    location = /login {  
       #規則B  
    }  
    location ^~ /static/ {  
       #規則C  
    }  
    location ~ \.(gif|jpg|png|js|css)$ {  
       #規則D  
    }  
    location ~* \.png$ {  
       #規則E  
    }  
    location !~ \.xhtml$ {  
       #規則F  
    }  
    location !~* \.xhtml$ {  
       #規則G  
    }  
    location / {  
       #規則H  
    }  

那麼產生的效果如下:
訪問根目錄/, 比如http://localhost/ 將匹配規則A
訪問 http://localhost/login 將匹配規則B,http://localhost/register 則匹配規則H
訪問 http://localhost/static/a.html 將匹配規則C
訪問 http://localhost/a.gif, http://localhost/b.jpg 將匹配規則D和規則E,但是規則D順序優先,規則E不起作用,而 http://localhost/static/c.png 則優先匹配到 規則C
訪問 http://localhost/a.PNG 則匹配規則E, 而不會匹配規則D,因爲規則E不區分大小寫。
訪問 http://localhost/a.xhtml 不會匹配規則F和規則G,http://localhost/a.XHTML不會匹配規則G,因爲不區分大小寫。規則F,規則G屬於排除法,符合匹配規則但是不會匹配到,所以想想看實際應用中哪裏會用到。
訪問 http://localhost/category/id/1111 則最終匹配到規則H,因爲以上規則都不匹配,這個時候應該是nginx轉發請求給後端應用服務器,比如FastCGI(php),tomcat(jsp),nginx作爲方向代理服務器存在
發佈了23 篇原創文章 · 獲贊 39 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章