LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > Linux配置 >

Nginx关于个性二级域名的配置

时间:2015-03-02 09:52来源:oschina 编辑:cevin15 点击:
在很多地方,比如说博客网站。我们经常可以会通过网站提供的配置功能,实现个性化的属于个人的二级域名,比如说http://cevin15.oschina.net。当然,OSC的博客目前还没有这个功能。 最近
 在很多地方,比如说博客网站。我们经常可以会通过网站提供的配置功能,实现个性化的属于个人的二级域名,比如说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

转载请保留固定链接: https://linuxeye.com/configuration/2223.html

------分隔线----------------------------
标签:nginx
栏目列表
推荐内容