现在,我有一个完全在EC2实例上的站点,包括所有静态文件,如css,js和图像。 我想知道处理移动它们的最佳方法。 例如,在给定的html页面的<HEAD> ,我有这个对.js文件的引用:
<script src="js/somefile.js"></script>
我想避免的是不得不进入并更新这个(和其他一些)如下:
<script src="https://SOMETHING.cloudfront.net/js/somefile.js"></script>
我并不担心将文件移到S3(但),但更多的是如何重写这些链接。 我想这应该有一些解决办法。
为了完整起见,我目前在EC3实例前面使用了一个负载平衡器(这也是我的SSL)。 我也使用路由53的DNS。
任何见解都会有帮助。
如果您不想更改链接,那么将静态文件移到S3上会带来很多好处,因为这意味着您仍然需要运行一种反向代理来正确地将请求路由到S3或您的EC2实例,取决于它是否是一个静态文件。
这就是说,有很多食谱挂钩例如nginx作为反向代理,例如https://coderwall.com/p/rlguog/nginx-as-proxy-for-amazon-s3-public-private-files 。 然后,您可以将nginx放在每个负载平衡的EC2实例上,并且可以将S3放在服务器上,也可以放在本地服务上,具体取决于内容是否是静态的。
Apache,nginx甚至IIS的各种重写模块都可以实现这一点,就像大多数CMS一样。 但是这为每个请求增加了很多开销。
为了自动安全地进行replace,您确实需要一个适用于任何脚本语言的HTMLparsing器。 这种情况下的正则expression式将很难安全地完成,除非您始终使用标签和CSS引用中参数的完全相同的间距和顺序。 而且你也确定你没有embedded<code>或<pre>或<script>标签的HTML。 更具挑战性的是,它会把JS代码中的string作为URL的一部分。
如果这些文件实际上不是HTML,而是PHP或其他,那么您需要一个完整的语言parsing器来保证安全。 或者使用正则expression式search并用手动确认来replace。
最后的select将是一个具有自定义起源的完全代理CDN。 Cloudflare浮现在脑海。 Cloudfront也可以这样做,但是自定义SSL确定在云端方面非常昂贵。