如何动态创建子域名?

如何动态创建子域名?

我希望能够使用脚本语言(例如 PHP、Python、Perl 或其他语言)动态创建和删除子域名。我使用 Apache 作为 Web 服务器

例子:

http://subdomain.example.com
http://subdomain2.example.com

谢谢

答案1

您可以在 DNS 设置中为每个子域创建 CNAME 条目/A 记录

CNAME 记录是域管理设置中的记录,允许您控制域的子域。

实现自动化除了注册之外,您还可以编写一个脚本,当每个用户注册时执行该脚本。

您也可以参考此链接,了解 Apache 的分步过程:

如何在 apache 中设置子域名

替代解决方案

您还可以参考更简单的 通配符解决方案,由 Alnitak 提供

您可以为每个已知子域使用特定的 DNS (CNAMEA/ AAAA)条目,或者使用接受 *.example.com 的通配符 DNS 条目:

$ORIGIN example.com
foo     IN A 12.34.6.78
bar     IN A 12.34.6.78

或者

$ORIGIN example.com
*       IN A 12.34.6.78

后者的优点是,一旦服务运行,DNS或Apache配置就不需要更改。缺点是,所有此类通配符查找(根据定义)最终都必须返回相同的IP地址。

Apache 配置将取决于您的要求,包括最终用户控制和安全性。请注意,如果用户有权在服务器上运行 CGI 脚本,则需要进行额外设置以确保安全完成。

根据内容是静态的还是动态的,这也会影响您的配置:

  1. 使用mod_vhost_alias将各个虚拟主机映射到服务器上的各个目录中。

  2. 如果你真的为每个已知站点创建一个单独的<VirtualHost>部分,但每次有新用户注册时你都必须重新启动 Apache

  3. 使用单个<VirtualHost>,然后查看$SERVER_NAME 呈现输出的脚本中请求的 URL 的主机名部分(来自环境变量),以确定要显示哪个用户的内容。

答案2

子域名的创建是 Apache 内置的,请查看大规模虚拟主机。具体来说:http://httpd.apache.org/docs/2.0/vhosts/mass.html

您需要做的就是制定一个约定,然后让您的脚本在需要时创建目录。但是,从技术上讲,您需要从 apache mass vhost 配置设置开始。

答案3

这实际上是一个 DNS 问题,而不是 Apache 问题,除非您有指向所述 Web 服务器的 *.example.com 记录。如果客户端无法解析子域??.example.com,则 Web 服务器无关紧要。

答案4

我在 Python 网站中使用的另一个解决方案是在中间件中检查子域。然后我根据子域数据库进行检查,如果找到匹配项,我会设置一个请求级别设置,告诉代码我正在查看哪个子域。

它确实相当干净,而且工作得很好。我的网站目前支持超过 350 个动态子域。

相关内容