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

我需要更改什么才能使其正常工作?

解决方案

所以我终于可以用这种方式修复我的错误了:

  1. /etc/apache2/sites-available目录下编辑我的keycloak.example.conf
...
<virtualhost keycloak.example.net:443>
...
RequestHeader set X-Forwarded-Proto "https"
...
  1. 确保在 apache 中启用 headers 模块:a2enmod headers
  2. 重新启动我的 Apache 服务器:service apache2 restart

结论

看来我只是没有配置我的 apache 服务器以必要的方式转发 https 流量。

我希望我可以帮助某人解决这个问题并节省你一些时间。非常感谢@Boomer,他发布了必要的 link 和@Mario,他支持这个孤独的问题并向我展示了他的解决方案。