如何处理访问一个“大脑”的多个站点?
-
19-09-2019 - |
题
一般来说,我的开发只覆盖了中小型公司和电子商务网站。
我的下一个项目将包含 30 个站点 - 然而,它们彼此之间大约有 95% 的共同点。我希望他们有一个“大脑”,这意味着我只能对框架进行一次更改、更新等。
我想知道 Stack Overflow 系列网站是否这样做(超级用户、stackoverflow、serverfault 等)。
我选择的语言/平台是 PHP 5.3、MySQL 5 和 Kohana Framework。
大脑应该有
- 1 个可以处理每个站点的管理系统
- 所有模板都存在于大脑中 - 但它们有占位符,例如标题、徽标等
- 我可以对全局模板进行任何更新,这样我就可以自动过滤到所有其他站点。
我意识到这会给大脑带来很大的压力,所以我必须大量使用服务器端缓存。
我如何让每个域访问大脑,例如:
http://www.mysite2.com/products/something
默默地访问 http://www.mothership.com/mysite2/products/something
这是最好的方法吗?你有什么建议吗?我走在正确的轨道上吗?
请随时向我询问更多细节。
解决方案
最简单的方法是使用虚拟主机。基本上您在一台机器上运行所有站点。一台机器有一个为所有站点提供服务的 Apache 配置。
如果站点的相似性大于差异,则只需将所有站点指向一个目录即可。PHP 文件可以检测它们正在服务的站点。您可以为每个站点提供不同的页眉和页脚来处理外观。您还可以通过这种方式限制某些页面。
如果这些站点的不同之处多于相似之处,则将每个站点指向不同的目录,并在每个目录中包含与这些站点相关的页面。
对于通用功能,您可以使用 mod_rewrite 之类的工具将不同站点上的 URL 映射到同一脚本,或者您可以在包含/需要通用功能的每个位置都有 PHP 脚本。
基本上有很多选择。您的目标应该是使网站易于维护并将代码重复保持在绝对最低限度。
根据要求,建议阅读:
- Apache 虚拟主机配置:不过,这是一个复杂的主题,因此您可能希望将其带到 Serverfault 来了解黑暗的深处;
- 在 Apache 中设置虚拟主机;和
- PHP 技巧:如何处理多个域.
其他提示
您可以在 Apache 中使用以下命令来实现此目的 <VirtualHost> Directive
. 。要在 Apache 2.x 下执行此操作,请编辑 httpd.conf
并取消注释此行(通常位于文件末尾附近): Include conf/extra/httpd-vhosts.conf
. 。然后找到该文件 httpd-vhosts.conf
并输入 VirtualHosts
以这种格式:
<VirtualHost 10.1.2.3>
DocumentRoot /home/site1
ServerName site1.com
</VirtualHost>
<VirtualHost 10.1.2.3>
DocumentRoot /home/site2
ServerName site2.com
</VirtualHost>
<VirtualHost 10.1.2.3>
DocumentRoot /home/site2
ServerName site3.com
</VirtualHost>