【问题标题】:HAproxy subdirectoryHAproxy 子目录
【发布时间】:2017-10-06 21:05:08
【问题描述】:

我一直在搜索互联网的深度,试图让 HAProxy 正常运行,但我不确定它能否完成我想要的。

我试着按照这个:https://www.haproxy.com/blog/howto-write-apache-proxypass-rules-in-haproxy/

这是我的场景:我有一个在端口 8999 上运行 app1 的 VM。当我转到 https://PUBLIC-IP-ADDRESS/app1 时,HAProxy 应该会在 http://backend-ip:8999/ 启动 app1 的根目录。

我面临的问题是我可以让 HAProxy 代理初始连接,但所有后续请求都转到默认后端服务器的根目录。

frontend www-https 
  bind *:8989 ssl crt /ssl/server.pem 
  log global 
  option httplog 
  reqadd X-Forwarded-Proto:\ https 
  rspadd Strict-Transport-Security:\ max-age=31536000;\ includeSubDomains 
  acl app1 path_beg -i /app1 /app1/ 
  use_backend www-app1 if app1 
  default_backend www-backend

backend app1 
  option http-server-close
  option forwardfor
  reqirep [\:])\ /app1/(.) \1\ /\2 
  acl hdr_location res.hdr(Location) -m found 
  rspirep Location:\ (https?://Public-IP-ADDRESS(:[0-9]+)?)?(/.*) Location:\ /app1\3 if hdr_location 
  server app1 bk.IP-ADDRESS:8999 check

现在可以转到/app1/,但所有链接都指向/。所以点击任何地方都会让我回到https://PUBLIC-IP-ADDRESS。

非常感谢任何帮助。

【问题讨论】:

    标签: linux webserver haproxy


    【解决方案1】:

    resirep 只允许修改标头和请求行。

    它是 1.6+ 的新版本,可能(以有限的方式)使用 lua 脚本......但目前没有通用(成功)解决方案(作为参考 http://www.serverphorums.com/read.php?10,1322511) .

    https://serverfault.com/questions/789743/possibility-of-rewriting-response-bodies-in-different-webservers-nginx-apache 中的答案似乎是最新的。

    还有官方邮件列表-https://www.mail-archive.com/haproxy@formilux.org/msg25215.html,不要抱任何幻想。

    此外,还有许多陷阱 - 许多正则表达式(或一个非常复杂的)来处理所有相对(包括 ../)和绝对变量。

    无需重写的解决方案:

    1. 让应用在 /app1 上可用 - 如果您可以控制它
    2. 有点像上面 - 根据来自 haproxy 的某些标头(x-forwarded-path?)设置 <base>
    3. 放弃/app1 路径并使用子域(我会选择这个)

    【讨论】:

    • 我完全同意使用子域而不是子目录,但不幸的是,这不是一个选项。所以我放弃了 HAproxy 并让它与 apache 一起工作。不过感谢您的建议。
    猜你喜欢
    • 2014-04-08
    • 2018-03-08
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多