将静态文件从 EC2 移动到 S3(或 cloudfront)而无需更新链接

将静态文件从 EC2 移动到 S3(或 cloudfront)而无需更新链接

现在,我有一个完全在 EC2 实例上的站点,包括所有静态文件,如 css、js 和图像。我想知道处理移动它们的最佳方法。例如,在给<HEAD>定的 html 页面上,我有对 .js 文件的引用:

<script src="js/somefile.js"></script>

我想避免的是必须进入并将这个(和一堆其他的)更新为如下内容:

<script src="https://SOMETHING.cloudfront.net/js/somefile.js"></script>

我目前还不担心将文件移动到 S3,而是更关心如何重写这些链接。我想一定有办法解决这个问题。

为了完整起见,我目前在 EC3 实例(这也是我的 SSL 所在的地方)前面使用负载均衡器。我还使用 Route 53 作为 DNS。

任何见解都会有帮助。

答案1

如果您不想更改链接,那么您将失去将静态文件移动到 S3 的许多好处,因为这意味着您仍然需要运行某种反向代理来将请求正确地路由到 S3 或您的 EC2 实例,具体取决于它是否是静态文件。

话虽如此,有很多方法可以将 nginx 等作为反向代理,例如https://coderwall.com/p/rlguog/nginx-as-proxy-for-amazon-s3-public-private-files。然后,您可以将 nginx 放在每个负载平衡的 EC2 实例上,并根据内容是否为静态,从 S3 或本地服务中放置服务器。

答案2

Apache、nginx 甚至 IIS 等各种重写模块都可以即时执行此操作,大多数 CMS 也可以。但这会给每个请求增加很多开销。

要自动安全地进行替换,您确实需要一个适用于任何脚本语言的 HTML 解析器。除非您始终在标签和 CSS 引用中使用完全相同的间距和参数顺序,否则很难完全安全地执行此案例的正则表达式。并且您还确定嵌入<code><pre><script>标签中没有 HTML。更具挑战性的是 URL,它是 JS 代码中字符串的一部分。

如果文件实际上不是 HTML,而是 PHP 或其他什么,你需要一个完整的解析器语言是安全的。或者使用正则表达式搜索并替换为手动确认。

最后一个选项是具有自定义来源的全代理 CDN。Cloudflare 就是一个例子。Cloudfront 也可以做到这一点,但使用 Cloudfront 的自定义 SSL 肯定非常昂贵。

相关内容