在很多地方,比如说博客网站。我们经常可以会通过网站提供的配置功能,实现个性化的属于个人的二级域名,比如说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_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有多种路径规则,则需要一一进行配置。
如果以后有更好的实现方式,再来更新。待续……
时间: 2024-10-25 03:24:26