ssl - 如何使 HAProxy 的 SSL 重定向和路径重写(使用 reqrep)同时工作?
问题描述
我需要在同一个域上部署不同的应用程序,因此我设置了backend
用reqrep ^([^\ ]*\ /)appA[/]?(.*) \1\2
. 当我只部署应用程序的 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
解决方案
使用http-request
以声明顺序处理的指令。它们也是较新的功能,通常比reqxxx
.
http-request redirect scheme https if ! { ssl_fc }
http-request set-path %[path,regsub(^/appA/,/)]
见http-request
。需要 1.6 或更高版本,其中regsub()
转换器可用。
推荐阅读
- msys2 - windows10编译win32版本ffmpeg时报错,如何解决?
- angular - 捕获不是函数
- python-3.x - 将时间戳转换为字符串 pandas python
- android - Linux上正确的串口初始化问题
- nativescript - 通过nativescript vue删除沙发数据库中的特定数据集?
- css - ReactJS 不读取 img 标签 src
- javascript - Firefox:允许来自任何上下文的指针锁定
- python-3.x - 无法将 locust.stats_logger 的内容设置到日志文件中
- arrays - 关于数组指针
- cronofy - 避免在身份验证期间链接参数在 cronofy 中不起作用