Nginx系列教程:在server_name指令中使用正則運算式

來源:互聯網
上載者:User
關鍵字 nginx 正則運算式 系列教程 server_name

server_HTTP://www.aliyun.com/zixun/aggregation/11696.html">name的匹配順序

nginx中的server_name指令主要用於配置基於名稱虛擬主機,server_name指令在接到請求後的匹配順序分別為:
1、準確的server_name匹配,例如:

server { listen 80; server_name howtocn.org www.howtocn.org; ...}

2、以*萬用字元開始的字串:

server { listen 80; server_name *.howtocn.org; ...}

3、以*萬用字元結束的字串:

server { listen 80; server_name www.*; ...}

4、匹配正則運算式:

server { listen 80; server_name ~^(?<www>.+)\.howtocn\.org$; ...}

nginx將按照1,2,3,4的順序對server name進行匹配,只有有一項匹配以後就會停止搜索,所以我們在使用這個指令的時候一定要分清楚它的匹配順序(類似于location指令)。
server_name指令一項很實用的功能便是可以在使用正則運算式的捕獲功能,這樣可以儘量精簡佈建檔,畢竟太長的設定檔日常維護也很不方便。 下面是2個具體的應用:

在一個server塊中配置多個網站

server { listen 80; server_name ~^(www\.)? (.+)$; index index.php index.html; root /data/wwwsite/$2; }

網站的主目錄應該類似于這樣的結構:

/data/wwwsite/howtocn.org/data/wwwsite/linuxtone.org/data/wwwsite/baidu.com/data/wwwsite/google.com

這樣就可以只使用一個server塊來完成多個網站的配置。

在一個server塊中為一個網站配置多個次層網域

實際網站目錄結構中我們通常會為網站的次層網域獨立創建一個目錄,同樣我們可以使用正則的捕獲來實現在一個server塊中配置多個次層網域:

server { listen 80; server_name ~^(.+)?\.howtocn\.org$; index index.html; if ($host = howtocn.org){ rewrite ^ HTTP:// www.howtocn.org permanent; } root /data/wwwsite/howtocn.org/$1/; }

網站的目錄結構應該如下:

/data/wwwsite/howtocn.org/www//data/wwwsite/howtocn.org/nginx/

這樣訪問HTTP://www.howtocn.org時root目錄為/data/wwwsite/howtocn.org/www/,HTTP://nginx.howtocn.org時為/data/wwwsite/ howtocn.org/nginx/,以此類推。
後面if語句的作用是將howtocn.org的方位重定向到HTTP://www.howtocn.org,這樣既解決了網站的主目錄訪問,又可以增加seo中對HTTP://www.howtocn.org的功能變數名稱權重。

多個正則運算式

如果你在server_name中用了正則,而下面的location欄位又使用了正則匹配,這樣將無法使用$1,$2這樣的引用,解決方法是通過set指令將其賦值給一個命名的變數:

server { listen 80; server_name ~^(.+)?\.howtocn\.org$; set $www_root $1; root /data/wwwsite/howtocn.org/$www_root/; loca tion ~ .*\.php?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwsite/ howtocn.org/$fastcgi_script_name; include fastcgi_params; } }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.