我在 S3 上托管以下 URL 的资产:http://cdn.site.com/image.jpg在我的应用程序中,我自动提供版本化 URL 以强制浏览器在部署后下载新文件:“/1.2.3/image.jpg”
在每次部署中,我只想覆盖较旧的文件。因此,我需要在 HAProxy 中使用正则表达式来重写以下内容:
1.2.3/image.jpg
变成这样:
http://cdn.site.com/image.jpg
另一个问题是:HAProxy 是否会重定向请求(对用户可见)或者仅在“后台”执行此操作,因此此重定向将是不可见的。
提前致谢!
答案1
这是执行该操作的代码。
acl imagereq path_beg /image.jpg reqrep ^Host:\ 1.2.3 Host:\ cdn.site.com if imagereq
但我不认为这真的是你想做的事。
reqrep 将使 haproxy 改变其为用户提供内容的位置。
但是:如果用户必须一路访问您的服务器,那么您已经浪费了优质 CDN 的大部分好处。(优质 CDN 距离您的用户比距离您更近,您的用户可以从他们那里获取您的部分内容,而不必一路返回到您这里)
当您使用 reqrep 时,您只是让 haproxy 弹出到离您最近的 CDN 节点,而不是从您维护的服务器获取它。
理想情况下,您要做的是调整您的 HTML 以直接指向您的 CDN。
查看 facebook 等网站的源代码。您会看到它们充斥着指向 static.ak.fbcdn.net 等 URL 的链接。
static.ak.fbcdn.net 是 static.ak.facebook.com.edgesuite.net 的别名。static.ak.facebook.com.edgesuite.net 是 a749.dsw4.akamai.net 的别名。
akamai 是一家知名的 CDN 提供商。
通过将您的 cdn 内容位置明确地放在原始 HTML 中,您的用户只需获取您的主 HTML,并且所有其他内容将直接从比您更靠近用户的 CDN(希望)加载...
您可以考虑让 haproxy 向用户发送重定向,将他们指向内容的 CDN。但正如我之前所说,如果用户已经一路来到您的前门,那么您就浪费了 CDN 的很多好处。
祝你好运。