Nginx 請求匹配規則
當一個請求到來,nginx首先會檢查請求的目標ip地址和埠與哪一個規則裡listen的部分相匹配。
如果同一個ip和埠中匹配了多個虛擬的server塊,nginx將會測試HTTP請求中Host
頭部的值和
nginx配置檔案中server_name
的值。如果一個Host
匹配到了多個server_name
,那麼nginx
將會用以下順序匹配,並且一旦匹配上就用那個server_name
所在的server塊來處理:
-
Host
和server_name
完全匹配 -
以
*
開頭的,最長的匹配,例如*.example.org
-
以
*
結尾的,最長的匹配,例如mail.*
- 配置檔案裡,出現順序中,第一個匹配的正則表示式
-
如果以上規則都沒有匹配到,那麼將會把請求打到設有
default_server
的那一個server裡去
nginx中include/*.conf
會是什麼順序呢?這將如何應用於上述第四條規則呢?
當請求進入server塊之後,nginx又將如何匹配到哪一個location呢?以下是執行順序:
-
nginx將測試所有的寫好字首的location,例如
location /test
,location /
,並且儲存能匹配的最長的 那個。如果有location = /
並且匹配,那麼匹配到此結束,進入該location塊。 -
如果最長的能匹配的location帶有
^~
,那麼將不進行下一步,到此為止,進入該location塊 - 依次檢查帶正則表示式的location塊看是否匹配,如果匹配,則匹配到此結束,進入該塊
- 如果正則表示式沒有匹配到,則使用之前所儲存的最長的字首的塊
參考:
- ofollow,noindex" target="_blank">https://www.nginx.com/resources/admin-guide/nginx-web-server/
- http://nginx.org/en/docs/http/ngx_http_core_module.html#location