1. 程式人生 > 程式設計 >nginx用正則表示式實現泛域名自動匹配目錄的方法

nginx用正則表示式實現泛域名自動匹配目錄的方法

nginx用正則表示式實現泛域名自動匹配目錄

用nginx可以實現虛擬主機的功能,可以繫結多個網址。
通常主域名都是寫死在配置裡面的,所以要增加匹配時,需要手動新增。

基本寫法

最基本的寫法是server{
listen 80;
server_name www.a.com;
root /html/a;
…
}

server{
listen 80;
server_name www.b.com;
root /html/b;
…
}

正則式寫法

域名繫結後,自動匹配到相應的目錄中,不需要一個一個域名去寫配置。
匹配目錄為:html/域名/二級域名,例如www.baidu.com會匹配到baidu.com/www目錄下

server {
 listen 80;
 # $subdomain 將匹配到二級域名級以上
 # $domain 將匹配到一級域名
 # $tld 將匹配到根節點名
 server_name ~^((?<subdomain>.*)\.)?(?<domain>[^.]+)\.(?<tld>[a-zA-Z]+)$;

 #如果沒有$subdomain,則跳轉到www
 if ($subdomain = "") {
  # set $subdomain "_";
  set $subdomain "www";
  return 301 $scheme://www.$domain.$tld$request_uri;
 }

 root /usr/share/nginx/html/${domain}.${tld}/${subdomain};
}

其他

nginx 的匹配順序,搜尋一下有很多文章,我就不詳細說了。
因為正則表示式的匹配優先順序最低,只有當其他都匹配不到時才會進行正則表示式的匹配,所以不用擔心影響其他的精確匹配。

一般人不會有那麼多的域名要匹配,相反,是要遮蔽掉一些惡意的域名指向。

但是測試的時候,為了不影響正在執行的網頁,可以在hosts中添中一條ip 域名記錄,用不存在的域名來測試,這時候就比較有用了。

總結

到此這篇關於nginx用正則表示式實現泛域名自動匹配目錄的文章就介紹到這了,更多相關nginx正則表示式泛域名匹配目錄內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!