我从众多着名的扩展视频屏幕截图中收集到,当您的网站变得越来越大时,代理缓存就是最佳选择。代理缓存使用etag等,因为etags可以更具体,强大的验证器可能是最佳选择。但是,我也听说在服务器场方案中,etag不是正确的解决方案,因为它可能因服务器而异(如何?)
这似乎是矛盾的,即如果他们运行的是大型负载平衡的服务器场,则最有可能实现基于e-tag的代理缓存。因此,如果电子标签在这种情况下失败,他们是如何做到的? :last_modified并不是一个很好的选择。
在rails应用程序中,假设我的帖子索引操作中的etags是
:etag => "all_posts_#{Post.count}".
如果它是负载均衡的服务器场,这会因服务器而异吗?
答案 0 :(得分:3)
通常当他们谈论Etags在服务器之间变化时,它与Apache提供的静态连接有关。默认情况下Apache includes the file's inode in the Etag。如果文件不在共享资源(如NFS导出的NAS)上,则每个服务器上的文件inode将不同。通常,建议将Apache配置为:
FileETag MTime Size
但如果服务器的修改时间不同,即使这样也存在差异。
但是,对于非静态内容,您在代码中生成Etag,因此在多个服务器上都是相同的。