是否可以使用 haproxy 隐藏后端服务器的 URL 路径?后端服务器的 URL 路径是https://backend:8443/backend_url(/.*)
我希望始终将 URL 路径保留在浏览器中https://haproxy/haproxy_url(/.*)
后端应用程序在 tomcat 中运行,并且有一些 j_spring_security_check 会破坏正常的重写和代理,这就是我尝试使用 haproxy 对其进行反向代理的原因。我还需要在 haproxy 上为多个应用程序重用端口 443,并且 haproxy 为所有传入的 SSL 流量托管组织通配符证书。
使用我当前的配置,haproxy URL 从 更改https://haproxy/haproxy_url(.)
为 https://haproxy/backend_url(/.*)
。
我怎样才能永远保留它https://haproxy/haproxy_url(/.*)
?
我当前的配置是:
frontend https-in
bind *:443 ssl crt /usr/local/etc/haproxy/ssl/domain.pem
option http-server-close
option forwardfor
reqadd X-Forwarded-Proto:\ https
reqadd X-Forwarded-Port:\ 443
# set HTTP Strict Transport Security (HTST) header
rspadd Strict-Transport-Security:\ max-age=15768000
# some ACLs and URL rewrites...
default_backend https-in-backends
backend https-in-backends
http-request set-header X-Forwarded-Host %[req.hdr(Host)]
http-request del-header X-Forwarded-Port
http-request set-header X-Forwarded-Proto https if { ssl_fc }
stick on src
stick-table type ip size 10240k expire 60m
acl no_redir url_beg /haproxy_url
reqirep ^([^\ :]*)\ /haproxy_url(.*) \1\ /backend_url\2
rspirep ^([^\ :]*)\ (.*)/haproxy_url(.*) \1\ \2/backend_url/\3
server backend_srv backend1:8443/backend_url ssl verify none
答案1
我通过在后端配置中修改对浏览器的响应来解决这个问题。不知道这是否是可接受的方法,但对我来说很有效。
rspirep ^(Location:)\ https://([^/]*)/backend_url(.*)$ \1\ https://\2/haproxy_url\3
不幸的是 j_spring_security_check 仍然使一切变得糟糕。:-(