使用Keycloak在反向代理后面登录后的无限循环

时间:2019-06-20 08:27:36

标签: docker ssl nginx https keycloak

我的情况

我有一台IP x.x.x.x的服务器

我的Web应用程序正在服务器的端口8083上运行。

Keycloak(与docker一起部署)正在服务器的端口8080上运行。

我想设置nginx,以便当我访问my-website.com时,它将重定向到x.x.x.x:8083上的Web应用程序,而当我访问my-website.com/auth时,它将重定向到{上的Keycloak {1}}。我也将SSL用于我的网站。

这是我的Nginx ssl.conf文件

x.x.x.x:8080

我的问题:

当我访问upstream upstream_auth { server 127.0.0.1:8080; } server { listen 80; listen [::]:80; server_name my-website.com www.my-website.com; return 301 https://my-website.com; } server { listen 443; ssl on; server_name my-website.com; ssl_certificate /etc/ssl/my-website.crt; ssl_certificate_key /etc/ssl/my-website.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /etc/nginx/dhparams.pem; keepalive_timeout 60; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; root /var/lib/tomcat7/webapps/ROOT/; client_max_body_size 50M; location / { proxy_pass http://127.0.0.1:8083/; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Ssl on; proxy_set_header X-Forwarded-Proto $scheme; } location /auth/{ proxy_pass http://upstream_auth; proxy_http_version 1.1; proxy_set_header URI_REQUEST_ORIGIN $request_uri; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Ssl on; proxy_set_header X-Forwarded-Proto $scheme; #proxy_pass_header Set-Cookie; proxy_set_header Connection **; proxy_set_header Proxy **; } } 时,它带我到keycloak landing page(如我所料)。然后,我单击管理员控制台,然后登录到Keycloak的Master Realm,浏览器似乎陷入了my-website.com/authhttps://my-website.com/auth/admin/master/console/的无限循环中。

我一直在寻找解决方案,似乎有很多原因可能导致这种情况发生。

我在这里做什么错了?

1 个答案:

答案 0 :(得分:0)

只需弄清楚如何解决我的问题即可。

我在docker-compose中为Keycloak添加以下行,现在一切正常:

 PROXY_ADDRESS_FORWARDING: 'true'

https://hub.docker.com/r/jboss/keycloak/所述:

  

在代理后面运行Keycloak时,需要启用代理   地址转发。

docker run -e PROXY_ADDRESS_FORWARDING=true jboss/keycloak

不确定为什么会这样。如果有人可以解释,请这样做。我想在这里了解我的问题。