我有一个 IIS 服务器群,它提供类似于域名停放站点的功能,其中有数千个域分配给系统,并且内容动态生成。我需要一个负载平衡和缓存解决方案。我打算使用带有 mod_cache 和 mod_proxybalance 的 Apache 2.2 来实现这一点。
我之前使用 Apache 的经验相当有限,通常只处理几个基于名称的虚拟主机。我之前从未用它实现过负载平衡或代理。
在研究配置时,我对一些基本配置指令感到困惑,我不确定如何为这个环境配置。特别是,apache 文档给出了关于未正确配置 ServerName 指令的严重警告。在这种情况下,我不确定如何处理。
该网站不提供自己的内容,而是缓存和代理内容。我无法将每个域名放入单独的 virutalhost 指令中。在这种情况下,ServerName 之类的指令(或其他似乎需要域名的指令)是否有必要?
编辑:
如果您想提出其他解决方案,我很乐意听取。到目前为止,已经提出了 ngnix,但 ngnix 无法代理基于名称的虚拟主机,因为它的代理代码仅使用 http 1.0 到后端服务器。我也不确定它是否可以缓存基于名称的虚拟主机。
Varnish 看起来像是一种可能的缓存解决方案,但我真的希望可以在同一台服务器上托管它,这样我就不需要为每个功能配备多台服务器。
答案1
如果你打算更换后端,mod_vhost_alias
否则,如果您只是将缓存放在现有解决方案的前面,Varnish 或 Squid 会更适合。Varnish 内置了对后端负载平衡、健康检查等的支持。您还可以在前面运行一对 ipvs 服务器来平衡负载,并为一对(或更多)Varnish 服务器提供 100% 的正常运行时间。
答案2
基本上,您需要<VirtualHost *>
每个域都有一个,每个域都有自己的ServerName
和ServerAlias
,在每个域里面您将放置与代理和缓存相关的指令。
我建议你把每个文件一个域名放在一个公共目录中,然后从主 apache 文件中包括所有内容。如今,大多数 Linux 发行版都使用 Debian/Ubuntu 等目录来做到这一点sites-available
-sites-enabled
所有域名都是可用的目录并简单地链接到已启用目录将被激活。
我知道这不是你问的,但既然这只是域名停放,你有没有考虑过使用nginx? 它的设计目的就是这样(前端接收大点击量并提供静态/缓存/代理内容)。
答案3
你可能想看看http://httpd.apache.org/docs/2.0/vhosts/mass.html尤其是最后一段。我已经使用 mod_rewrite 成功运行了大规模虚拟主机。