V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kenneth
V2EX  ›  程序员

博客程序自定义域名是基于什么原理

  •  
  •   kenneth · 2013-07-08 17:54:03 +08:00 · 4489 次点击
    这是一个创建于 4147 天前的主题,其中的信息可能已经有所发展或是发生改变。
    博客程序是如何自制绑定域名的呢
    比如数据库留一个字段 custom_domain:你绑定的域名
    如何将博客程序的所有链接,都变成这个自定义的域名的?

    求思路,类似diandian, logdown,wrintings.io的绑定域名。
    想知道代码实现的逻辑。
    17 条回复    1970-01-01 08:00:00 +08:00
    leojoy710
        1
    leojoy710  
       2013-07-08 17:56:56 +08:00
    从$host拿到变量反向代理到app的对应的route上?...
    2code
        2
    2code  
       2013-07-08 17:57:09 +08:00
    首先,子域名可以配置wildcard
    然后......
    xdite
        3
    xdite  
       2013-07-08 17:57:57 +08:00
    ```
    constraints(Subdomain) do
    get '/' => 'posts#index'


    resources :posts do
    collection do
    get :search
    end
    end

    end
    ```

    ```
    # -*- encoding : utf-8 -*-
    class Subdomain
    def self.matches?(request)

    case request.host
    when Setting.host, "www.#{Setting.host}", nil
    false
    else
    true
    end
    end

    end

    ```

    配上 nginx 的 wildcard
    kenneth
        4
    kenneth  
    OP
       2013-07-08 17:58:32 +08:00
    @leojoy710 反向代理好像要在nginx中配置吧,能否代码中自动反向代理呢?
    xdite
        5
    xdite  
       2013-07-08 18:00:38 +08:00
    leojoy710
        6
    leojoy710  
       2013-07-08 18:03:53 +08:00
    @kenneth 代码里面就是从header拿到hostname...
    kenneth
        7
    kenneth  
    OP
       2013-07-08 18:05:57 +08:00
    @xdite 感谢大牛分享rails实现,但是我想自己在tornado中也实现一下,nginx这边配置还不是很懂原理。是反向代理?还是什么?
    比如自定义域名aaa.com
    访问
    www.aaa.com
    解析到ip
    请求进来nginx
    nginx这里配置不明白。。。
    leojoy710
        8
    leojoy710  
       2013-07-08 18:13:09 +08:00
    lhx2008
        9
    lhx2008  
       2013-07-08 18:17:09 +08:00
    我想应该是全部解析到一个PHP程序(nginx配置添加多个域名),然后PHP识别当前域名,抽出相关的内容,这个是比较简单的程序吧,像点点那些不清楚
    kenneth
        10
    kenneth  
    OP
       2013-07-08 18:19:07 +08:00
    @leojoy710 是不是我在自绑定域名的地方,CNAME指向kenneth.aaa.com,然后再自己分发请求路由?
    xdite
        11
    xdite  
       2013-07-08 18:20:52 +08:00
    我收到某一個 controller 裡面,然後 find_by_subdomain 或 find_by_fqdn 決定 render 誰的 blog.
    leojoy710
        12
    leojoy710  
       2013-07-08 18:26:50 +08:00
    @kenneth *.aaa.com都指向你服务器...
    然后nginx就能收到*.aaa.com了...然后你看是在nginx上做还是在tornado里面做...
    kenneth
        13
    kenneth  
    OP
       2013-07-08 18:27:01 +08:00
    @xdite 我不太明白tornado中如何处理这请求了。我想在我的tornado博客程序中也实现一下。
    kenneth.aaa.com
    hello.aaa.com
    world.aaa.com
    这样二级域名我可以处理但是如果绑定www.mydomain.com cname解析到kenneth.aaaa.com我就不知道怎么处理了
    xdite
        14
    xdite  
       2013-07-08 20:20:23 +08:00
    BOYPT
        16
    BOYPT  
       2013-07-09 09:09:28 +08:00
    @kenneth CNAME的意思是www.mydomain.com的IP地址和kenneth.aaaa.com一样,但是kenneth.aaaa.com不会出现在任何逻辑当中。
    thetcc
        17
    thetcc  
       2013-07-09 09:17:38 +08:00
    泛解析,把*.yourdomain.com 解析到你的IP,你的程序获取到hostname,根据hostname的第一个字符串,比如abc.yourdomain.com,根据abc显示abc用户的主页就可以了。 有没有nginx都可以的,你也可以根据abc的字符串分组分发到不同的实例。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1292 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:01 · PVG 02:01 · LAX 10:01 · JFK 13:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.