我有一个网站(在Elastic Beanstalk的Tomcat中运行)生成艺术家唱片(一个艺术家的单个页面)。这可能是资源密集型的,因为艺术家页面在一个月内不会改变,所以我在其前面放置了CloudFront Distribution。使用Amazon S3和Cloudfront智能缓存webapges
我认为这意味着没有艺术家的请求曾经被我的服务器多次提供过,但是它不如那么好。这篇文章解释了每个边缘位置(欧洲,美国等)在第一次查找资源时都会错过,并且在云端缓存中保留了多少资源的限制,以便可以放弃这些资源。
所以为了解决这个问题,我已经通过服务器代码进行了更改,以便将网页的副本存储在S3中的存储桶中,并在请求进入时首先检查该网页,因此如果艺术家页面已经存在于S3中,则服务器将检索它并将其内容作为网页返回。这大大减少了处理,因为它只为特定的艺术家构建一个网页。
但是:
- 请求还是要过到服务器以检查艺术家页面存在。
- 如果艺术家页面存在,那么网页(有时可能最大可达20mb)首先下载到服务器,然后服务器返回页面。
所以我想知道如果我能改善这一点 - 我知道你可以构建一个S3存储桶作为重定向到另一个网站。有没有每页的方式,我可以让艺术家的请求去S3存储桶,然后让它返回页面,如果它存在或调用服务器,如果它不?
或者,我可以让服务器检查页面是否存在,然后重定向到S3页面,而不是首先将页面下载到服务器?
我喜欢选项2,安全性不是真正的问题(我认为),因为我希望数据可以公开评估,我唯一的问题是这个。 –
目前所有服务都通过http:// server/id服务,因此聪明的用户可以直接输入url。使用新方法http:// server/id只会告诉s3:// s3bucket/id的内容是否有效,但如果从未请求过页面,或者不是真正的问题,如果聪明的用户直接进入s3,这会给出错误? –
@PaulTaylor如果用户很聪明,他会很容易弄清楚他必须去你的网络服务器并在那里提出请求:)另外,http://server.com/id告诉用户S3或者内容是否存在不是,并据此告诉他(重定向他?)关于内容的适当URL。 –