我在LB后面运行HAProxy 1.4.24。 SSL在LB上终止。我想将http请求重定向到https。我有以下配置:
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend httpIn *:7258
maxconn 100000
option forwardfor header x-forwarded-for
acl is_http hdr(X-Forwarded-Proto) http
redirect scheme https code 301 if is_http
default_backend app
backend app
balance roundrobin
cookie LBSTICKY insert indirect nocache httponly secure maxlife 8h
server app1 10.10.10.10:8080 cookie app1
server app2 10.10.10.11:8080 cookie app2
我的问题是行
redirect scheme https code 301 if is_http
在运行haproxy -f /etc/haproxy/haproxy.cfg -c
时生成以下错误:
[ALERT] 026/210541 (8482) : parsing [/etc/haproxy/haproxy.cfg:67] : 'redirect' expects 'code', 'prefix', 'location', 'set-cookie', 'clear-cookie', 'drop-query' or 'append-slash' (was 'scheme').`
我重新检查了说我正在使用正确的重定向语法的文档。有什么想法吗?
答案 0 :(得分:4)
redirect scheme
确实在HAProxy 1.4.24中不可用。目前,它可用于HAProxy 1.5-dev13及更高版本以及HAProxy 1.4.25及更高版本,包括haproxy-1.4 master。
您查看的文档可能是当前从1.4版本生成的by Cyril Bonté,而不是1.4.24版本。
因此,您可以升级到其中一个指定版本或解决限制。常见的解决方法是使用redirect prefix
这样的
redirect prefix https://domain.com if is_http { hdr(host) -i domain.com }
必须针对您希望重定向发生的每个主机名枚举此规则。
答案 1 :(得分:3)
此选项适用于HAProxy 1.5 ... 为此,您必须在1.4分支中使用重定向位置。
巴普蒂斯特