You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让基于Quarkus 3.8.4的Keycloak仅监听localhost?

如何让基于Quarkus的Keycloak仅监听localhost?

我运行基于Quarkus的Keycloak时,它默认监听系统所有接口,想把它限制为仅监听localhost但一直没成功。之前Quarkus默认只监听localhost,后来改成仅在DEV环境下默认监听localhost,甚至还存在日志错误显示实际监听主机和端口的问题。

现在的问题是,我不确定正确的配置项是什么,也不敢信日志输出——不管是用Java系统属性还是环境变量修改配置,日志始终显示http://0.0.0.0:8080。

根据Quarkus官方文档:

quarkus.http.host
HTTP主机配置
开发/测试模式下默认值为localhost,生产模式下默认值为0.0.0.0

默认设为0.0.0.0是为了方便在容器中部署Quarkus,但这不适合开发/测试模式,因为网络中的其他人可以连接到你的开发机器。

对应的环境变量:QUARKUS_HTTP_HOST

我执行的命令和日志如下:

C:\Program Files\Keycloak\24.0>set JAVA_OPTS_APPEND=-Dquarkus.http.host=127.0.0.1
C:\Program Files\Keycloak\24.0>set QUARKUS_HTTP_HOST=127.0.0.1
C:\Program Files\Keycloak\24.0>bin\kc.bat start-dev

"JAVA_OPTS already set in environment; overriding default settings with values: -Dh2.bindAddress=127.0.0.1"
"Appending additional Java properties to JAVA_OPTS: -Dquarkus.http.host=127.0.0.1"
2024-05-27 16:19:57,684 WARN  [org.infinispan.CONFIG] (keycloak-cache-init) ISPN000569: Unable to persist Infinispan internal caches as no global state enabled
2024-05-27 16:19:57,780 INFO  [org.infinispan.CONTAINER] (keycloak-cache-init) ISPN000556: Starting user marshaller 'org.infinispan.jboss.marshalling.core.JBossUserMarshaller'
2024-05-27 16:19:58,825 INFO  [org.keycloak.quarkus.runtime.hostname.DefaultHostnameProvider] (main) Hostname settings: Base URL: <unset>, Hostname: LAP3738, Strict HTTPS: false, Path: <request>, Strict BackChannel: false, Admin URL: <unset>, Admin: <request>, Port: -1, Proxied: false
2024-05-27 16:19:59,535 WARN  [io.quarkus.agroal.runtime.DataSources] (JPA Startup Thread) Datasource <default> enables XA but transaction recovery is not enabled. Please enable transaction recovery by setting quarkus.transaction-manager.enable-recovery=true, otherwise data may be lost if the application is terminated abruptly
2024-05-27 16:20:00,595 INFO  [org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory] (main) Node name: node_129835, Site name: null
2024-05-27 16:20:00,595 INFO  [org.keycloak.broker.provider.AbstractIdentityProviderMapper] (main) Registering class org.keycloak.broker.provider.mappersync.ConfigSyncEventListener
2024-05-27 16:20:01,413 INFO  [io.quarkus] (main) Keycloak 24.0.4 on JVM (powered by Quarkus 3.8.4) started in 5.137s. Listening on: http://0.0.0.0:8080
2024-05-27 16:20:01,413 INFO  [io.quarkus] (main) Profile dev activated.
2024-05-27 16:20:01,413 INFO  [io.quarkus] (main) Installed features: [agroal, cdi, hibernate-orm, jdbc-h2, keycloak, logging-gelf, narayana-jta, reactive-routes, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, vertx]
2024-05-27 16:20:01,415 WARN  [org.keycloak.quarkus.runtime.KeycloakMain] (main) Running the server in development mode. DO NOT use this configuration in production.
2024-05-27 16:24:49,766 INFO  [io.quarkus] (main) Keycloak stopped in 0.029s

如上所示,即使修改了主机配置且激活了DEV环境,它仍然在全局监听。


解决方案

1. 直接通过启动命令传递参数

跳过环境变量设置,直接在启动命令中添加--http-host=127.0.0.1参数,这种方式优先级最高,能确保配置生效:

bin\kc.bat start-dev --http-host=127.0.0.1

2. 修改配置文件

在Keycloak安装目录的conf文件夹下,创建或编辑application.properties文件,添加以下配置:

quarkus.http.host=127.0.0.1

DEV模式启动时会自动加载该文件中的配置。

3. 验证实际监听状态

Quarkus存在日志显示与实际监听不一致的历史问题,不要完全依赖日志。可以用netstat命令验证实际监听端口:

netstat -ano | findstr :8080

如果结果显示127.0.0.1:8080,说明配置已经生效,只是日志显示错误;若仍显示0.0.0.0:8080,再尝试其他方法。

4. 排查配置覆盖问题

检查是否有其他配置文件(如kc.conf)或环境变量覆盖了quarkus.http.host的值。可以添加-Dquarkus.log.level=DEBUG启动参数,查看详细的配置加载日志,确认你的配置是否被正确读取。


内容的提问来源于stack exchange,提问作者Thorsten Schöning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 07:00:55