nginx中的server_name指令主要用於配置基於名稱虛擬主機.
一、 匹配順序,server_name指令在接到請求後的匹配順序如下:
1、確切的server_name匹配,例如:
server
2、以*萬用字元開始的最長字串:
server
3、以*萬用字元結束的最長字串:
server
注意: 萬用字元名字只可以在名字的起始處或結尾處包含乙個星號,並且星號與其他字元之間用點分隔。所以,「www.*.example.org
」和「w*.example.org
」都是非法的。
有一種形 如「.example.org
」的特殊萬用字元,它可以既匹配確切的名字「example.org
」,又可以匹配一般的萬用字元名字「*.example.org
」。
4、匹配正規表示式:
server
注:正規表示式必須以「~」開頭。
nginx將按照1,2,3,4順序對server name進行匹配(而和配置段本身的排版順序無關),只要有一項匹配以後就會停止搜尋。
二、 server_name指令的正規表示式應用
server_name指令一項很實用的功能便是可以在使用正規表示式的捕獲功能.nginx使用的正規表示式相容pcre。
為了使用正規表示式,虛擬主機名必須以波浪線「~」起始否則該名字會被認為是個確切的名字:
server_name ~^www\d+\.example\.net$;
如果表示式含星號,則會被認為是個萬用字元名字(而且很可能是乙個非法的萬用字元名字)。不要忘記設定「^
」和「$
」錨點,語法上它們不是必須的,但是邏輯上是的。同時需要注意的是,域 名中的點「.」需要用反斜線「\」轉義。含有「
」的正規表示式需要被引用,如:
server_name "~^(?\w\d+)\.example\.net$";
否則nginx就不能啟動,錯誤提示是:
directive "server_name" is not terminated by ";" in ...
命名的正規表示式捕獲組在後面可以作為變數使用:
server
}
pcre使用下面語法支援命名捕獲組:
如果nginx不能啟動,並顯示錯誤資訊:?
'從pcre-7.0開始支援,相容perl 5.10語法
?'name
從pcre-7.0開始支援,相容perl 5.10語法
?p
從pcre-4.0開始支援,相容python語法
pcre_compile() failed: unrecognized character after (?< in ...說明pcre版本太舊,應該嘗試使用
?p
。捕獲組也可以以數字方式引用:
server
}
不過,這種用法只限於簡單的情況(比如上面的例子),因為數字引用很容易被覆蓋。
下面是2個具體的應用:
1. 在乙個server塊中配置多個站點
server
站點的主目錄應該類似於下面的結構,這樣就可以只使用乙個server塊來完成多個站點的配置。
/data/wwwsite/google.com本例中正規表示式捕獲組建立了變數,普通的正規表示式捕獲組可以建立$0、$1、…、$9這10個變數。$0表示原串,$1-$9表示第一到第九個匹配組的內容。
2. 在乙個server塊中為乙個站點配置多個二級網域名稱
}站點的目錄結構應該如下:
/data/wwwsite/sklinux.com/nginx/這樣root目錄和目標host位址的對應關係如下:
<--> /data/wwwsite/sklinux.com/nginx/後面if語句的作用是將sklinux.com的方位重定向到,這樣既解決了**的主目錄訪問,又可以增加seo中對的網域名稱權重。
3.多個正規表示式
如果你在server_name中用了正則,而下面的location欄位又使用了正則匹配,這樣將無法使用$1,$2這樣的引用,解決方法是通過set指令將其賦值給乙個命名的變數:
server
}
Nginx防盜煉配置案例配置,Nginx的知識分享
這樣的話,我們會看到每天訪問量很大,占用很多不必要的頻寬,浪費資源,所以我們需要做一些限制。防盜煉其實就是採用伺服器端程式設計,通過url過濾技術實現的防止盜鏈的軟體。防盜煉的定義此內容不在自己伺服器上,而通過技術手段,繞過別人放廣告有利益的最終頁,直接在自己的有廣告有利益的頁面上向終端使用者提供此...
Nginx 實戰 nginx的日誌配置
nginx的錯誤日誌 nginx錯誤日誌平時不用太關注,但是一旦出了問題,就需要借助錯誤日誌來判斷問題所在。配置引數格式 error log path to log level nginx錯誤日誌級別 常見的錯誤日誌級別有debug info notice warn error crit alert...
常用的nginx 配置
user wwwwww nginx 使用的使用者及使用者組 也有些人用 user nobody 這個使用者 worker processes8 8個worker 一般和核心數一樣 全域性錯誤日誌 可設定日誌級別,及pid檔案 error log logs error.log 這是相對目錄,也可以用絕...