当用户注册到我的网站时,应该如何为用户设置子域。
需要哪些基础设施?我正在使用 Linux 服务器。
您可以为每个已知子域使用特定的 DNS(CNAME
或A
/ 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 脚本,则需要进行额外设置以确保安全完成。
根据内容是静态的还是动态的,这也会影响您的配置:
用于mod_vhost_alias
将各个虚拟主机映射到服务器上的各个目录。
如果你真的想要,为每个已知站点创建一个单独的<VirtualHost>
部分,但是每次新用户注册时你都必须重新启动 Apache
使用单个,然后在呈现输出的脚本中<VirtualHost>
查看请求 URL 的主机名部分(来自环境变量),以确定要显示哪个用户的内容。$SERVER_NAME
您可以在 DNS 设置中为每个子域创建一个 CNAME 条目/A 记录
CNAME 记录是您的域管理设置中的一条记录,可让您控制域的子域。
要将其与注册一起自动化,您可以编写一个脚本,该脚本在每个用户注册时执行。
您也可以参考此链接,了解 Apache 的分步过程:
(既然你提到了Linux,我假设它一定是APache。如果不是,请说明)
替代解决方案
您还可以在同一线程中参考Alnitak 给出的通配符解决方案。我发现他的方法更简单。:)
基础架构包括访问 dns 服务器以添加通配符条目,并在 Apache 中重写规则。
试试这些答案:
或此链接:
如果您使用 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 文档可能对您有所帮助。
Apache 允许您基于单个服务器上的子域指定任意数量的“站点”。创建一个新的“站点定义”文件,其中包含适当的子域信息,以及适当的 DNS 通配符,将满足您的需求。
换句话说,过程是这样的:
重要这是基于 Debian 风格的 Apache 配置,其中配置文件包含在一个目录中,主配置读取该目录中的所有配置文件。这将大大简化事情,因为添加/删除子域将意味着添加/删除文件,而不是编辑单个文件,因此该过程将更容易自动化。