apache https 代理背后的 Keycloak "https required"
Keycloak behind apache https proxy "https required"
我刚刚设置了一个 keycloak docker 容器如下:
docker run --name keycloak --net keycloak-network -e DB_ADDR=mysql -e DB_DATABASE=keycloak -e DB_USER=keycloak -e DB_PASSWORD=mypassword -d -p 8088:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=mypassword -e KEYCLOAK_HOSTNAME="keycloak.example.net" -e PROXY_ADDRESS_FORWARDING=true -e KEYCLOAK_HTTPS_PORT=443 jboss/keycloak
在我的服务器上,我有一个 apache2 网络服务器 运行,我的网站有以下配置文件可用 "keycloak.example.net":
<virtualhost keycloak.example.net:80>
ServerName keycloak.example.net
Redirect permanent / https://keycloak.example.net/
</virtualhost>
<virtualhost keycloak.example.net:443>
ServerName keycloak.example.net
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/keycloak.example.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/keycloak.example.net/privkey.pem
SSLProxyEngine on
ProxyPreserveHost On
<location />
Order allow,deny
Allow from all
Require all granted
ProxyPass http://localhost:8088/
ProxyPassReverse http://localhost:8088/
</location>
</virtualhost>
我的 apache 网络服务器已经将我(如您所见强制 https)正确重定向到我的 docker 容器 运行 在我主机上的端口 8088 上,在 docker-containers internal端口 8080.
我一访问 https://keycloak.example.net/auth - 它就试图将我重定向到正确的 keycloak 站点,但随后抛出此错误:
HTTPS required
我需要更改什么才能使其正常工作?
解决方案
所以我终于可以用这种方式修复我的错误了:
- 在
/etc/apache2/sites-available
目录下编辑我的keycloak.example.conf
:
...
<virtualhost keycloak.example.net:443>
...
RequestHeader set X-Forwarded-Proto "https"
...
- 确保在 apache 中启用
headers
模块:a2enmod headers
- 重新启动我的 Apache 服务器:
service apache2 restart
结论
看来我只是没有配置我的 apache 服务器以必要的方式转发 https 流量。
我希望我可以帮助某人解决这个问题并节省你一些时间。非常感谢@Boomer,他发布了必要的 link 和@Mario,他支持这个孤独的问题并向我展示了他的解决方案。
我刚刚设置了一个 keycloak docker 容器如下:
docker run --name keycloak --net keycloak-network -e DB_ADDR=mysql -e DB_DATABASE=keycloak -e DB_USER=keycloak -e DB_PASSWORD=mypassword -d -p 8088:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=mypassword -e KEYCLOAK_HOSTNAME="keycloak.example.net" -e PROXY_ADDRESS_FORWARDING=true -e KEYCLOAK_HTTPS_PORT=443 jboss/keycloak
在我的服务器上,我有一个 apache2 网络服务器 运行,我的网站有以下配置文件可用 "keycloak.example.net":
<virtualhost keycloak.example.net:80>
ServerName keycloak.example.net
Redirect permanent / https://keycloak.example.net/
</virtualhost>
<virtualhost keycloak.example.net:443>
ServerName keycloak.example.net
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/keycloak.example.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/keycloak.example.net/privkey.pem
SSLProxyEngine on
ProxyPreserveHost On
<location />
Order allow,deny
Allow from all
Require all granted
ProxyPass http://localhost:8088/
ProxyPassReverse http://localhost:8088/
</location>
</virtualhost>
我的 apache 网络服务器已经将我(如您所见强制 https)正确重定向到我的 docker 容器 运行 在我主机上的端口 8088 上,在 docker-containers internal端口 8080.
我一访问 https://keycloak.example.net/auth - 它就试图将我重定向到正确的 keycloak 站点,但随后抛出此错误:
HTTPS required
我需要更改什么才能使其正常工作?
解决方案
所以我终于可以用这种方式修复我的错误了:
- 在
/etc/apache2/sites-available
目录下编辑我的keycloak.example.conf
:
...
<virtualhost keycloak.example.net:443>
...
RequestHeader set X-Forwarded-Proto "https"
...
- 确保在 apache 中启用
headers
模块:a2enmod headers
- 重新启动我的 Apache 服务器:
service apache2 restart
结论
看来我只是没有配置我的 apache 服务器以必要的方式转发 https 流量。
我希望我可以帮助某人解决这个问题并节省你一些时间。非常感谢@Boomer,他发布了必要的 link 和@Mario,他支持这个孤独的问题并向我展示了他的解决方案。