【发布时间】:2018-06-30 14:54:41
【问题描述】:
我需要在同一个域上部署不同的应用程序,因此我设置了backend 以使用reqrep ^([^\ ]*\ /)appA[/]?(.*) \1\2 重写 URL。当我只部署应用程序的 HTTP 或 HTTPS 版本时,它可以工作。
但是,如果我尝试将所有 HTTP 流量重定向到 HTTPS,它就不起作用。问题是 HAProxy 在重定向之前已经重写了 URL 并删除了 /appA 部分。因此,如果我尝试访问http://myserver.com/appA,最终将请求页面https://myserver.com,而不是https://myserver.com/appA。
我不能将重定向规则放在 reqrep 规则之前,因为 HAProxy 似乎必须在重定向之前处理所有重写。
我可以做些什么来使我的配置按预期工作?这应该很明显,但我似乎无法在网上找到相关答案。
我的配置:
frontend http_front
bind *:80
reqadd X-Forwarded-Proto:\ http
acl appA_url url_beg /appA
use_backend appA if appA_url
frontend https_front
bind *:443 ssl crt /etc/haproxy/certs/myserver.com.pem
reqadd X-Forwarded-Proto:\ https
acl appA_url url_beg /appA
use_backend appA if appA_url
backend appA
reqrep ^([^\ ]*\ /)appA[/]?(.*) \1\2
redirect scheme https if !{ ssl_fc }
balance roundrobin
server web1 127.0.0.1:5001 check
【问题讨论】:
标签: ssl redirect proxy reverse-proxy haproxy