1. 當多個server block時,server name匹配順序為:
    1. 完全符合的server_name,意味裡面沒有萬用字元*
    2. 以星號起始的server_name
    3. 以星號結尾的server_name
    4. 第一個符合正則表達式的server_name(第一個是由在nginx.conf中的順序決定)
  2. 萬用字元:
    1. 萬用字元只能在起始或結束,只能有一個,例如*.dom.tw或www.dom.*。
    2. www.*.dom.tw、w*.dom.tw都是錯的
    3. 如果要做到上面的,應該用正則表達式搞定,分別是www\..+\.dom\.tw及w.*\.dom\.tw
    4. *可以匹配多個節,*.example.org ”不僅匹配www.example.org,也匹配www.sub.example.org
    5. .example.org 的特殊萬用字元,它可以既匹配確切的名字example.org,又可以匹配一般的萬用字元名字 *.example.org
  3. 正則表達式
    1. 由開始,類似js中的\\
    2. 最好是記得用開頭&結尾,不然邏輯有問題(這點我也還沒搞懂為什麼必要)
    3. 有{}的正則前後要加上"",不然會報錯。例如  server_name "(?<name>\w\d { 1,3 } +)\.example\.net";

 

命名的正則表達式捕獲組在後面可以作為變量使用:

 

server {

server_name (www\.)?( ?<domain> .+);

 

location / {

root /sites/ domain ;

}

}

PCRE使用下面語法支持命名捕獲組:

 

?< name > 從PCRE-7.0開始支持,兼容Perl 5.10語法

?' name ' 從PCRE-7.0開始支持,兼容Perl 5.10語法

?P< name > 從PCRE-4.0開始支持,兼容Python語法

如果nginx不能啟動,並顯示錯誤信息:

pcre_compile() failed: unrecognized character after (?< in ...

說明PCRE版本太舊,應該嘗試使用?P<name>。捕獲組也可以以數字方式引用:

 

server {

server_name (www\.)?(.+);

 

location / {

root /sites/ 2 ;

}

}

文章標籤
全站熱搜
創作者介紹
創作者 jeffath 的頭像
jeffath

jeffath的部落格

jeffath 發表在 痞客邦 留言(0) 人氣(737)