服务/存储由多个Nginx(docker)容器提供服务的静态文件的最佳方法

时间:2019-05-05 16:48:27

标签: docker nginx devops

对于我的Web应用程序,我将使用分布在多个物理主机上的多个nginx容器。但是,我不清楚用于存储和提供静态文件的方法。我应该在每个物理主机上复制所有静态文件还是其他更好/更有效的选择?

1 个答案:

答案 0 :(得分:0)

这实际上取决于您要提供的内容类型。

如果您始终在提供全部或几乎所有内容(除非只是静态页面,否则不太可能提供),那么您确实需要在每个节点中都提供内容的副本才能实现高性能。

但是,如果您确实经常提供某些内容,而其他内容却不那么频繁,这是比较常见的(例如,一个层次结构较深的网站,其中某些页面的访问量最高,而另一些则是几乎没有访问过),则可以将容器配置为带有缓存的反向代理(例如,请参见nginx - reverse proxy with caching),并在第二层中设置一些可以服务所有静态内容的nginx容器。

这样,您可以拥有大量便宜的容器来进行负载平衡和缓存,并且当发生缓存未命中时,它们将查询服务所有静态内容的成本更高的主机。这样可以降低存储成本,并保持良好的性能平衡。

替代方法包括让容器服务于某个路由(例如,/ home将是一个容器,/ about-us是另一个容器,/ services将是另一个容器,等等),以及一个将请求转发给另一个容器的nginx入口点容器。如果您事先知道每个位置会有多少流量,那么此方法就很好。

另一个选项实际上取决于您的网络配置。如果所有容器都在同一网络中,则可以拥有包含静态内容的网络存储,并将容器卷绑定到此类存储。在这里,出于性能原因,您还需要某种缓存,以避免由于不必要的请求而使网络崩溃。

最后,您可以创造性地结合所有这些选项,为您的网络提供最有效的结构。您知道您所托管的网站的类型,因此您应该能够以有效地提供内容的方式使用此工具。为静态网站提供轻量级内容与为大量大型文件提供服务并不相同。

相关问题