4

当用户注册到我的网站时,应该如何为用户设置子域。

需要哪些基础设施?我正在使用 Linux 服务器。

4

5 回答 5

6

您可以为每个已知子域使用特定的 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>查看请求 URL 的主机名部分(来自环境变量),以确定要显示哪个用户的内容。$SERVER_NAME

于 2008-11-26T16:21:04.550 回答
3

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

CNAME 记录是您的域管理设置中的一条记录,可让您控制域的子域。

要将其与注册一起自动化,您可以编写一个脚本,该脚本在每个用户注册时执行。

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

如何在apache中设置子域

(既然你提到了Linux,我假设它一定是APache。如果不是,请说明)

替代解决方案

您还可以在同一线程中参考Alnitak 给出的通配符解决方案。我发现他的方法更简单。:)

于 2008-11-26T16:17:26.820 回答
0

基础架构包括访问 dns 服务器以添加通配符条目,并在 Apache 中重写规则。

试试这些答案:

或此链接:

于 2008-11-26T16:21:34.330 回答
0

如果您使用 Linux 服务器,我假设您使用 Apache 作为您的网络服务器。

您必须为子域和虚拟主机设置正确的 DNS 路由。

虚拟主机相当容易设置,但我不确定以编程方式即时执行它们有多容易。

大多数情况下,它就像编辑 apache 配置文件并添加以下内容一样简单:

Port 80
ServerName www.mydomain.com

NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /www/user-bob
ServerName bob.mydomain.com
...
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/user-sally
ServerName sally.mydomain.com
...
</VirtualHost> 

VirtualHost 文档可能对您有所帮助。

于 2008-11-26T16:22:56.263 回答
0

Apache 允许您基于单个服务器上的子域指定任意数量的“站点”。创建一个新的“站点定义”文件,其中包含适当的子域信息,以及适当的 DNS 通配符,将满足您的需求。

换句话说,过程是这样的:

  1. 设置通配符,以便 *.mysite.com 指向正确的服务器。
  2. 当新用户注册时,创建适当的 Apache 站点定义文件 - 您可能会有一个基本模板,您可以将正确的子域信息放入并保存。
  3. 让 Apache 重新读取其配置。
  4. 利润。

重要这是基于 Debian 风格的 Apache 配置,其中配置文件包含在一个目录中,主配置读取该目录中的所有配置文件。这将大大简化事情,因为添加/删除子域将意味着添加/删除文件,而不是编辑单个文件,因此该过程将更容易自动化。

于 2008-11-26T16:24:54.637 回答