歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux配置 >> Nginx關於個性二級域名的配置

Nginx關於個性二級域名的配置

日期:2017/2/27 14:57:27   编辑:Linux配置
在很多地方,比如說博客網站。我們經常可以會通過網站提供的配置功能,實現個性化的屬於個人的二級域名,比如說http://cevin15.oschina.net。當然,OSC的博客目前還沒有這個功能。

最近遇到個差不多的需求,網上看了下別人的實現方式,寫得不太清楚,自己第一遍即使看懂了,回頭看第二遍估計還是不懂。還是要自己測試下,然後記錄記錄。於是玩了下本地的Nginx,研究怎麼去實現這種個性二級域名。

首先,我們的思路,是把二級域名轉為程序容易解析的二級目錄形式。舉個例子,用戶輸入http://cevin15.mydomain.com進行訪問,而真實的博客地址是:http://www.mydomain.com/blog/cevin15,之後,再在程序中進行處理就很簡單啦。那我們的做法可以是通過服務器配置,把http://cevin15.mydomain.com轉為真實的訪問路徑http://www.mydomain.com/blog/cevin15。

第一時間想到的是通過Nginx的rewrite來實現。配置如下:
server {
        listen       80;
        server_name  *.mydomain.com;
        if ( $host ~* (\b(?!www\b)\w+)\.\w+\.\w+ ) {
            set $subdomain $1;
        }
        location / {
            rewrite ^/$ http://www.mydomain.com/blog/$subdomain last;
        }
    }
其中的if,是用於過濾某些特殊的二級域名,比如www,然後獲取二級域名的變量值。

重載Nginx的配置,測試。發現跳轉是正常了,但是浏覽器的url也跟著變成:http://www.mydomain.com/blog/$subdomain。

這樣就沒用了,起不到我們需求的酷酷的二級域名功能。

浏覽器的url會發生變化的原因是,我們在使用rewrite時,使用了全路徑的配置。

既然下面這種寫法不行:
rewrite ^/$ http://www.mydomain.com/blog/$subdomain last;
那就換回來這種寫法:
rewrite ^/$ /blog/$subdomain last;
再加上nginx的反向代理功能:
proxy_pass http://www.mydomain.com/;
就可以實現很酷的二級域名功能了。
全部配置如下:
server {
        listen       80;
        server_name  *.mydomain.com;
        if ( $host ~* (\b(?!www\b)\w+)\.\w+\.\w+ ) {
            set $subdomain $1;
        }
        location / {
            rewrite ^/$ /blog/$subdomain last;
            proxy_pass http://www.mydomain.com/;
        }
    }
這樣配置之後,除了if中過濾的二級域名,其他的二級域名{sudomain}.mydomain.com,對於服務器,其真實的路徑都是www.mydomain.com/blog/{sudomain}。

這是目前想到的二級域名實現方式,想法其實很簡單,缺陷當然也有,就是在rewrite上面。如果url有多種路徑規則,則需要一一進行配置。
原文:http://my.oschina.net/cevin15/blog/381033
Copyright © Linux教程網 All Rights Reserved