標籤:
在很多地方,比如說部落格網站。我們經常可以會通過網站提供的配置功能,實現個人化的屬於個人的次層網域,比如說http://cevin15.oschina.net。當然,OSC的部落格目前還沒有這個功能。
最近遇到個差不多的需求,網上看了下別人的實現方式,寫得不太清楚,自己第一遍即使看懂了,回頭看第二遍估計還是不懂。還是要自己測試下,然後記錄記錄。於是玩了下本地的Nginx,研究怎麼去實現這種個性次層網域。
第一時間想到的是通過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/$subdomain last; } }
其中的if,是用於擷取次層網域的變數值。
重載Nginx的配置,測試。發現跳轉是正常了,但是瀏覽器的url也跟著變成:http://www.mydomain.com/$subdomain。
這樣就沒用了,起不到我們需求的酷酷的次層網域功能。
瀏覽器的url會發生變化的原因是,我們在使用rewrite時,使用了全路徑的配置。
既然下面這種寫法不行:
rewrite ^/$ http://www.mydomain.com/$subdomain last;
那就換回來這種寫法:
rewrite ^/$ /$subdomain last;
再加上nginx的反向 Proxy功能:
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 ^/$ /$subdomain last; proxy_pass http://www.mydomain.com/; } }
這是目前想到的次層網域實現方式,想法其實很簡單,缺陷當然也有,就是在rewrite上面。如果url有多種路徑規則,則需要一一進行配置。
如果以後有更好的實現方式,再來更新。待續……
Nginx關於個性次層網域的配置