Fab*_*chi 5 reverse-proxy load-balancing haproxy keycloak
我有一个 HAProxy 在两台以独立模式运行 Keycloak 的机器前面充当负载均衡器。
版本
HAProxy 配置
global
user haproxy
group haproxy
log /dev/log local0
log-tag WARDEN
chroot /var/lib/haproxy
daemon
quiet
stats socket /var/lib/haproxy/stats level admin
maxconn 256
pidfile /var/run/haproxy.pid
tune.bufsize 262144
defaults
timeout connect 5000ms
timeout client 5000ms
timeout server 5000ms
log global
mode http
option httplog
option dontlognull
option redispatch
retries 5
stats uri /haproxy-status
frontend http-in
mode http
bind *:80
maxconn 2000
redirect scheme https code 301 if !{ ssl_fc }
frontend https
mode http
default_backend servers
bind *:443 ssl crt /etc/letsencrypt/live/authhomolog2.portaltecsinapse.com.br/combined.pem
maxconn 2000
option forwardfor
http-request set-header X-Forwarded-Port %[dst_port]
http-request set-header X-Forwarded-For %[src]
http-request set-header X-Forwarded-Proto https
backend servers
mode http
balance source
cookie JSESSIONID prefix
server master 172.30.0.74:8080 maxconn 32 check cookie master
server slave 172.30.0.124:8080 maxconn 32 check cookie slave
Run Code Online (Sandbox Code Playgroud)
Keycloak相关配置
<subsystem xmlns="urn:jboss:domain:undertow:3.0">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default"
socket-binding="http"
proxy-address-forwarding="true"
redirect-socket="proxy-https"/>
...
...
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
<socket-binding name="proxy-https" port="443"/>
...
...
Run Code Online (Sandbox Code Playgroud)
当我尝试登录使用 Keycloak 作为单点登录的 Java 应用程序时,屏幕上出现 403 Forbidden 错误:
HAProxy日志
12月16日13:18:49 keycloak-haproxy-test WARDEN[8714]: 191.205.78.16:35794 [16/Dec/2017:13:18:48.582] https~ 服务器/ master 487/0/0/72/559 302第2765章——2/2/0/1/0 0/0 .br%2Ffavicon.ico&state=81%2F4ad46389-fe45-4dec-b804-5563c29c51db&login=true&scope=openid
HTTP/1.1" 12 月 16 日 13:18:49 keycloak-haproxy-test WARDEN[8714]: 54.233.89.231:54608 [16/Dec/2017:13:18:48.606] https~ 服务器/从机552 /0/0/ 4/556 400 457 - - --NN 2/2/0/1/0 0/0“POST /领域/宝马/协议/openid-connect/令牌 HTTP/1.1”
我意识到在我的机器(191.205.78.16)上启动的GET请求是由主Keycloak机器响应的,而由应用程序服务器(54.233.89.231)启动的重定向POST请求是由从Keycloak机器响应的。我希望所有这些请求都能由同一台机器(主机或从机)响应。你知道我是怎么做到的吗?我在 HAProxy 中尝试了很多不同的配置,但没有成功。:-(
再多提一个信息,如果我只保留主 Keycloak 实例或从 Keycloak 实例,它就可以正常工作。
Keycloak从属日志
2017-12-16 14:43:13.235 警告 [org.keycloak.events] (默认任务 1) type=CODE_TO_TOKEN_ERROR,realmId=BMW,clientId=BMWGestaoDealer,userId=null,ipAddress=54.233.89.231,error=invalid_code, grant_type=authorization_code,code_id=52204563-53c8-4c72-bd8c-cb7540ebda3b,client_auth_method=客户端秘密
如果有任何帮助,我将不胜感激。
小智 1
我不太熟悉 Haproxy 或 keycloak,但它看起来像是会话粘性的问题。所以我的猜测是,应该在 haproxy 端启用粘性会话,以便他可以在发生重定向时保持在同一后端。希望它能给你一个提示。
| 归档时间: |
|
| 查看次数: |
8373 次 |
| 最近记录: |