我正在编写一个脚本,准备在大量 Web 服务器上运行。这样我就可以在每台服务器上托管数千个网站了……脚本的一部分是将新域和子域添加到数据库中。在执行此操作时,我要么需要 [a] 使用 php 将每个域添加到我的虚拟主机(我不知道该怎么做),要么 [b] 添加某种通配符 DNS,任何使用 A 记录指向我的服务器的域都将转到同一个文件/目录,然后使用 htaccess 和 PHP 对其进行排序(我认为这是更好的选择)。有什么想法吗?
它需要完全由数据库驱动。这样当您访问 test.com/file.htm 时,它将提供dedicateddomain.com/index.php?s=test.com&f=file.htm,它将从 MySql 中提取并显示一些内容。
由于不值得深入研究的原因,它需要这样,所以大概我需要做一些 vhost 的事情来让一切都转到dedicateddomain.com,然后用 htacess/modrewrite 完成剩下的工作?
答案1
你看过mod_vhost_alias
?
您可能不需要重新发明轮子。
答案2
我有一个类似的设置,允许我在我开发的特定平台内滚动数千个域。
(请注意,如果您想要有多个动态子域名,可以通过通配符 DNS 条目 *.domain.com 指向您的一个虚拟主机 *.domain.com 中的 IP 和 ServerAlias 来实现 - 但由于这非常简单,我不会进一步解释如何设置动态域)
我不会告诉你什么是最好的方法,因为我相信没有这样的事情,有多种方法可以完成你想要实现的目标:我只是希望通过对我的设置进行一些说明,它可能会对你有所帮助。
将域添加到 DNS 服务器应该由某些脚本自动完成(我更喜欢在 bash 脚本中拥有该功能并将其与 PHP 或任何其他语言分开)。
处理所有事情的脚本太长,但理由很简单:
添加域
1. 计算序列号(日期 + 一些增量数字)
2. 检查域是否存在
3. 验证 IP(如果您打算在系统中使用多个 IP,如果不是,您可以将此位设为静态)
4. 将域区域引用添加到 named.conf
5. 创建 zone.db 文件
删除域
1. 减少序列
2. 从 named.conf 中删除域区域引用
3. 删除 zone.db 文件
由于 Serverfault 并没有很好地显示 bash 脚本(而且我的脚本很长),所以我把它发布到了 pastebin,你可以在这里找到脚本
然后您需要注意虚拟主机,如果您使用的是 apache 2.2,那么这非常简单,您只需要编写一个脚本来创建一个 $domain.conf 文件,其中指定了所有指令。
第三阶段将使用某种 RewriteRule,将域传递给 index.php,您可以在其中内部将该域重定向到相关结构。
我相信这个模式,因为这个模式可以让您在将来轻松地进行更改和调整。
希望有所帮助。
答案3
如果您希望将相同的设置应用于任何 Web 请求(无论主机名如何),那么您只需在 vhost 节之外设置所需的配置参数,这意味着它“默认”适用于任何与任何定义的 vhost 不匹配的请求。
答案4
基于名称的虚拟主机与通配符 DNS 相结合可以形成非常强大的组合。我有一台服务器上有 4500 个网站,它的配置可能比普通的 httpd.conf 长 5 行,再加上 BIND 中的通配符设置。最好的部分是,一旦设置完成,您就不需要再重新配置任何东西了,只需创建另一个目录,将其命名为您想要的域名,在其中放入一些内容,就大功告成了。