1)server_name指令主要用于配置基于名稱虛拟主機(在http > server 裡面),server_name指令在接到請求後的比對順序分别為:
1.準确的server_name比對,例如:
server {
listen 80;
server_namessdr.info www.ssdr.info;
...
}
2.以*通配符開始的字元串:
server {
listen 80;
server_name*.ssdr.info;
...
}
3.以*通配符結束的字元串:
server {
listen 80;
server_name www.*;
...
}
4.比對正規表達式:
server {
listen 80;
server_name~^(?.+)\.howtocn\.org$;
...
}
nginx将按照1,2,3,4的順序對servername進行比對,隻有有一項比對以後就會停止搜尋。
2)在一個server塊中為一個站點配置多個二級域名:
實際網站目錄結構中我們通常會為站點的二級域名獨立建立一個目錄,同樣我們可以使用正則的捕獲來實作在一個server塊中配置多個二級域名:
server
{
listen 80;
server_name ~^(.+)?\.domain\.com$;
index index.html;
if ($host = domain.com){
rewrite ^ http://www.domain.com permanent;
}
root /data/wwwsite/domain.com/$1/;
}
站點的目錄結構應該如下:
/data/wwwsite/domain.com/www/
/data/wwwsite/domain.com/nginx/
這樣通路www.domain.com時root目錄為/data/wwwsite/domain.com/www/,nginx.domain.com時為/data/wwwsite/domain.com/nginx/,以此類推。
後面if語句的作用是将domain.com的方位重定向到www.domain.com,這樣既解決了網站的主目錄通路,又可以增加seo中對www.domain.com的域名權重。
3)多個正規表達式:
如果你在server_name中用了正則,而下面的location字段又使用了正則比對,這樣将無法使用$1,$2這樣的引用,解決方法是通過set指令将其指派給一個命名的變量:
server
{
listen 80;
server_name ~^(.+)?\.howtocn\.org$;
set $www_root $1;
root /data/wwwsite/ssdr.info/$www_root/;
location ~ .*\.php?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME/data/wwwsite/ssdr.info/$fastcgi_script_name;
include fastcgi_params;