很久以来,我一直试图理解虚拟主机如何托管数千个网站而不会被黑客入侵,因为用户运行自己的代码。每个网站都在单独的服务器或虚拟机上运行吗?
答案1
共享主机托管通常(并且从历史上看)发生在一台机器上,该机器上启用了基于 Apache 名称的虚拟主机和每个用户的 Web 目录。
在 2020 年,“视情况而定”可能是一个有效的答案,但总的来说,使用 Apache 的共享网络托管在过去有非常明确和具体的工作方式,并且在很多情况下在现在仍然有效。
“每个网站是否在单独的服务器或虚拟机上运行?”
在大多数共享主机设置中,都有一个单一的 Web 服务器 - 通常运行 Apache Web 服务器软件 - 并且每个“主机”基本上只是系统上一个独立且不同的用户帐户;不是单独的服务器或者虚拟机。
避免黑客攻击的方法是将每个人的 Apache 文档根目录与其他人的主目录或类似设置隔离开来。如果一个网站被黑客攻击,意味着一个用户的网站被黑客攻击,而不是整个服务器。当然,针对一个网站的 DDoS 攻击可能会减慢所有网站的 Web 服务器速度,但如果该网站显然是黑客攻击的目标,共享托管设置通常会采取安全措施来限制该网站的速度,或者干脆关闭该网站。
至于像这样的共享 Web 服务器上可以容纳多少个网站,可以有数百个不同的帐户,但它们永远不会“同时登录”。他们有单独的用户帐户,Web 服务器软件(通常是 Apache)允许多个连接到该机器。像 Apache 这样的 Web 服务器软件仅按每个请求提供内容。因此,如果您有数百个网站,而没有人真正在特定时刻访问超过 5 个网站,那么只有这 5 个网站的内容目录才会被访问。
欲了解更多信息,请阅读基于名称的虚拟主机和每个用户的 Web 目录在 Apache 中。
基于名称与基于 IP 的虚拟主机
基于 IP 的虚拟主机使用连接的 IP 地址来确定要服务的正确虚拟主机。因此,您需要为每个主机设置一个单独的 IP 地址。
使用基于名称的虚拟主机,服务器依靠客户端将主机名作为 HTTP 标头的一部分进行报告。使用此技术,许多不同的主机可以共享相同的 IP 地址。
基于名称的虚拟托管通常更简单,因为您只需配置 DNS 服务器以将每个主机名映射到正确的 IP 地址,然后配置 Apache HTTP 服务器以识别不同的主机名。基于名称的虚拟托管还可以缓解对稀缺 IP 地址的需求。因此,除非您使用的设备明确要求基于 IP 的托管,否则您应该使用基于名称的虚拟托管。基于客户端支持的基于 IP 的虚拟托管的历史原因不再适用于通用 Web 服务器。
基于名称的虚拟主机建立在基于 IP 的虚拟主机选择算法之上,这意味着仅在具有最佳基于 IP 地址的虚拟主机之间搜索正确的服务器名称。
每个用户的 Web 目录
在具有多个用户的系统上,可以允许每个用户在其主目录中使用用户目录指令。访问 URL 的访问者
http://example.com/~username/
将获取用户“username
”主目录中的内容,以及由用户目录指示。
答案2
没有唯一的答案。可以是其中一种,也可以是两种。这完全取决于主机如何实施其基础设施以及提供哪些选项和功能或客户需要哪些选项和功能。