不要尝试在服务器端执行此操作。 CDN 服务的构建是可靠的,因为它们在地理上分布且具有容错性,并使用可用的最佳实践。
您无法通过 从您的 Django 应用程序 ping CDN 服务器来确定 CDN 服务器是否为您的用户工作。。您的用户位于不同的位置,并且可能具有非常不同的网络条件,例如正在使用来自不同国家/地区的移动网络连接,并且有一个遇到中断的网络提供商。
确实,您可以 ping CDN 服务器,这可能会解析为您的 Django 应用程序获取一个 CDN 负载平衡器地址并尝试查看该地址是否适合您,如果 CDN 源为下。然后,您可能必须查看您拥有的每个资源,即每个 JavaScript 和 CSS 文件,如果它们可用,则加载本地备份(如果不可用)。在服务器端。 这是非常缓慢且容易出错的。网络可能由于 googolplex 不同的原因而失败。
解决这个问题的正确方法是
- 仅使用本地服务器为这些静态文件提供服务,将负载分配给应用服务器,每个应用服务器都有自己的静态文件版本副本。如果您的应用程序服务器正常工作,它也应该有可用的副本;
- 在客户端进行检查,因为如果服务器不靠近您的 CDN 网络,服务器端查询会使您的服务器停止运行,并且您通常不希望依赖服务器端的任何外部资源;
- 或者,我建议您设置自己的 CDN,从代理 URL 或子域为您的本地文件提供服务。阅读下文。
理想情况下,如果您希望使用可靠的 CDN 源,您应该在用于托管文件的同一基础架构上设置具有冗余的 CDN 服务器。
因为您的站点位于 www.example.com,这是您的 Django 应用程序服务器地址。您将设置作为 CDN 服务的 cdn.example.com 域,例如 CloudFront 或类似服务,代理您对 www.example.com/static/ 的请求并将您的静态文件镜像为 CDN,从而减轻您的负担应用服务器。您可以定义您的 Django 应用程序以使用http://cdn.example.com/static 地址来提供静态文件。 有多种不同的服务可以为您的应用程序提供 CDN,CloudFront 只是一种选择。这将使您的静态、可 CDN 文件靠近您的用户。
理想情况下,您的应用程序服务器和 CDN 服务器托管在同一个冗余基础架构上,您可以声称,如果您的基础架构的一部分正常工作,其他部分也会正常工作,或者您的服务提供商违反了您的 SLA。您不希望使用损坏的基础架构并赶走您的客户,或使用最终会破坏生产的黑客。