Php 自定义URL/域(CNAME别名?)

Php 自定义URL/域(CNAME别名?),php,dns,lamp,domain-name,cname,Php,Dns,Lamp,Domain Name,Cname,我正在LAMP堆栈中创建一个应用程序,我想让用户能够使用自己的域,而不是我站点的子域。例如 而不是: 他们将使用: 我知道有一些公司使用CNAME记录提供此服务。()但是我不确定他们是如何做到端到端的 我的问题是: 这个过程叫什么?(因此,如果需要,我可以进一步研究) 我需要做什么来提供这些?我需要在DNS、apache和php方面做些什么才能让它正常工作 任何建议、链接或代码片段都将不胜感激 谢谢 更新 到目前为止,我已经能够设置通配符DNS条目,但是我仍然有CNAME记录解析到其他域的问题

我正在LAMP堆栈中创建一个应用程序,我想让用户能够使用自己的域,而不是我站点的子域。例如

而不是:

他们将使用:

我知道有一些公司使用CNAME记录提供此服务。()但是我不确定他们是如何做到端到端的

我的问题是:

  • 这个过程叫什么?(因此,如果需要,我可以进一步研究)

  • 我需要做什么来提供这些?我需要在DNS、apache和php方面做些什么才能让它正常工作

  • 任何建议、链接或代码片段都将不胜感激

    谢谢


    更新

    到目前为止,我已经能够设置通配符DNS条目,但是我仍然有CNAME记录解析到其他域的问题。 例如

    ->

    weareunified.com(这是一个测试用户主机)DNS

    joshstuart.com.au(这是主应用程序主机)DNS


    事实上,你不需要做任何事情

    您的用户需要让他们的DNS提供商添加基本映射到的CNAME记录

    任何查找的DNS客户端都被告知要查找,因此这是DNS/客户端问题,而不是服务器问题

    Amazon向EC2服务器的用户推荐这种技术


    请注意,CNAME记录有一个限制,它们不能被分配到域的根目录-您的用户不能分配,只能作为CNAME。

    我有一些类似于我对cpanel api2所做的事情

    基本上,用户将他的域指向我的dns,我使用api将他的域停在我的dns上

    我将每个用户的域存储在数据库中

    在页面加载时,我提取http_主机并将其与数据库进行比较,以查看该域是否存在。然后,我根据用户设置(我为来自同一脚本的所有页面提供服务)和数据库条目加载页面


    为了减少数据库负载,我将信息保存在识别主机的会话中。然后,我可以在每次后续加载时检查这个,而不是每次都检查数据库。

    另一种可能是实际成为用户的DNS主机并处理所有记录。您可以为此获得开源解决方案。(但您可能需要在不同的子网上拥有两个DNS服务器)。

    我使用LAMP进行了此设置,效果非常好。我是这样做的:

  • 包含我的应用程序的目标服务器位于正常的a记录(子)域上。因此,在您的情况下,我假设您的应用程序运行在joshstuart.com.au
  • 客户端需要将store.weareunified.com的DNS条目更改为joshstuart.com.au的CNAME。
  • Apache服务器有一个没有域规范的虚拟主机(在我的例子中),只是一个

  • 就这样。目前有70多个域名被CNAME到主应用程序域,并且每个域名根据需要为各自的站点提供服务(没有重定向等)。

    这里有几个不同的部分-设置DNS条目,然后让Apache响应请求

    您是否为客户正确设置了CNAME?请注意,您不能在weareunited.com上设置CNAME,它必须位于store.weareunited.com上,或其他非根域的主机名上

    听起来你可能不明白CNAME的工作原理。过度简化的版本是,当用户请求store.weareunited.com时,他们的本地名称服务器(例如,最终用户ISP中的名称服务器。对于Comcast上的我来说,它通常是Beaverton中的Comcast NS,或者。这是假设本地名称服务器尚未解析主机名,并且缓存中没有主机名)将查询根名称服务器以确定谁负责域。然后,本地namserver将查询域名称服务器以获取记录。记录可以是A记录,它是IP地址,也可以是CNAME,它指向另一个主机名

    当本地名称获取CNAME时,它将再次运行此过程以获取A记录。一旦它最终拥有带有IP地址的A记录,它将把IP地址返回给最终用户的浏览器,web浏览器将向该IP地址发出请求

    最终结果是web浏览器获得一个IP地址,然后使用原始主机名作为主机头向该IP地址发出请求-store.weareunited.com。因此,应将Apache设置为接收主机名store.weareunited.com的请求

    PHP不会关心主机名是什么,除非您正在检查环境变量,如$\u SERVER

    您可以让您的客户设置一个到joshstuart.com.au的CNAME。你当然可以创建额外的主机名,比如weareunited.joshstuart.com.au,或者做一个通配符,然后让你的客户将CNAME目标设置为那个唯一的主机名,但是为什么要麻烦呢?我只想:

    store.weareunited.com.  3600 IN CNAME   joshstuart.com.au.
    

    只要joshstuart.com.au向您的web服务器发送一个IP地址,CNAME就会工作。正如我前面提到的,Apache将看到store.weareunited.com收到一个请求,因此您需要为该主机名设置一个虚拟主机,或者像Berklee提到的那样创建一个通用vhost(尽管我不确定您将使用什么Apache指令来确保请求映射到域的正确文件…)

    值得一提的是,从你的角度来看,@Josh,你应该使用for
    *.app.com
    ,以避免每次添加客户时都必须使用自己的DNS记录。但是对于用户自己的自定义地址,我支持Rami,这是他们的域,他们将使用CNAME或指向实际服务器IP的a记录来管理它。谢谢您的帮助。请原谅我的无知,但是cname会像“转发器”或url别名一样工作吗。app.some_user.com/products是否会像那样出现在地址栏中
    joshstuart.com.au. A 111.67.3.227
    * CNAME joshstuart.com.au.
    
    store.weareunited.com.  3600 IN CNAME   joshstuart.com.au.