我的情况
我有一台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/auth
和https://my-website.com/auth/admin/master/console/
的无限循环中。
我一直在寻找解决方案,似乎有很多原因可能导致这种情况发生。
我在这里做什么错了?
答案 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
不确定为什么会这样。如果有人可以解释,请这样做。我想在这里了解我的问题。