amazon-s3 - Haproxy - 将请求转发到 S3 托管站点

我对 haproxy 的了解非常少。正在测试配置

S3 托管网站(route 53 别名)- content.mydomain.com
URL 登陆 haproxy - www.mydomain.com/getfiles/

是否可以将 www.mydomain.com/getfiles/重定向到 content.mydomain.com(s3 托管网站)。

我能够使用下面提到的配置将它重定向到在同一服务器上运行的另一个应用程序

  acl display-s3-content path_beg /getfiles/
  use_backend my-content if display-s3-content

backend my-content   
  reqrep ^([^\ ]*)\ (.*) \1\ /path/\2   
  server test www.mycomain.com:1936

但是当我尝试将它重定向到 s3 托管站点时,它不起作用。下面是不工作配置的后端

  reqrep ^([^\ ]*)\ (.*) \1\ /path/\2
  server test1 content.mydomain.com

谢谢!

最佳答案

正如您在评论中指出的那样,这是可行的:

reqirep ^Host: Host:\ content.mydomain.com

想法是设置Host header 到 S3 期望的值。

一个更简洁的方法是这样的:

http-request set-header Host content.mydomain.com

我说“更好”是因为它使用更新/更好/更安全的机制来处理 header ,但它从根本上实现了相同的目的:将请求 header 更改为目标服务器 (S3) 所期望的。使用 http-request方法更安全/更清洁,因为它在处理请求方面“更智能”——使用 req[i]rep 完全破坏协议(protocol)要容易得多。比http-request .

最初,您询问的是 /getfiles/test.jpg映射到 /test.jpg在桶里。这种重写在 HAProxy 1.6 及更高版本中非常简单和干净:

http-request set-path %[path,regsub(^/getfiles,)]

...但是在 1.5 中你必须使用 reqirepregsub (正则表达式替换)转换器不可用:

reqirep ^([^\ :]+)\ +/getfiles(.*) \1\ \2

这与 GET 匹配( HEADPOST 等)请求中的行并删除额外的 /getfiles从路径。包括 :在排除模式中阻止它匹配任何其他 header 。在将请求发送到 S3 之前,可以使用类似的模式添加前缀(例如发布版本等)。

https://stackoverflow.com/questions/39964607/

相关文章:

python - Django 选择和字典

scala - 隐式是私有(private)的吗?

python - 检查 Python 中两个字符串中的常用字母是否位于同一位置?

r - 如何在列表列上应用一个函数并在 dplyr 和 purrr 中返回另一个函数?

java - 当 PoolingHttpClientConnectionManager 中的 Max

angular - typescript 错误 TS1005 : '=' expected

erlang - 有什么方法可以浏览 erlang 术语存储 (ETS)

Groovy - 无法在注释中使用静态最终字符串

sql-server - TSQL 触发器而不是插入

android-instrumentation - AndroidJUnitRunner + Act