如何将Quarkus应用健康检查绑定到HTTP且其余接口使用HTTPS
Quarkus 健康检查端点HTTP暴露、其余接口HTTPS配置方案
1. 开启双端口监听配置
在application.properties中添加如下配置,让Quarkus同时监听HTTP和HTTPS端口:
# HTTPS端口配置,可根据需求调整 quarkus.http.ssl-port=8443 # 配置SSL证书,根据你的实际证书存储方式调整(也支持jks、p12等格式) quarkus.http.ssl.certificate.file=./conf/server.crt quarkus.http.ssl.certificate.key-file=./conf/server.key # 保留HTTP端口(默认8080),不自动禁用 quarkus.http.insecure-requests=enabled # 若负载均衡做了SSL卸载,会透传X-Forwarded-Proto等代理头,需开启以下配置 quarkus.http.proxy.proxy-address-forwarding=true
2. 添加全局请求拦截规则
通过Vert.x路由过滤器实现请求协议校验,仅放行健康检查相关路径的HTTP请求,其余HTTP请求强制走HTTPS:
import io.quarkus.vertx.web.RouteFilter; import io.vertx.ext.web.RoutingContext; public class HttpsAccessControlFilter { // 健康检查端点前缀,所有/q/health开头的路径都放行HTTP访问 private static final String HEALTH_ENDPOINT_PREFIX = "/q/health"; // 优先级设为最高,优先执行该拦截规则 @RouteFilter(100) void checkAccessProtocol(RoutingContext context) { // HTTPS请求直接放行 if (context.request().isSSL()) { context.next(); return; } // HTTP请求,匹配健康检查路径则放行 String requestPath = context.request().path(); if (requestPath.startsWith(HEALTH_ENDPOINT_PREFIX)) { context.next(); return; } // 其余HTTP请求,重定向到HTTPS地址,不需要重定向可替换为返回403 String httpsUrl = "https://" + context.request().host() + requestPath; if (context.request().query() != null) { httpsUrl += "?" + context.request().query(); } context.response() .setStatusCode(301) .putHeader("Location", httpsUrl) .end(); } }
3. 生效验证
- 访问
http://应用地址:8080/q/health系列端点,可正常返回健康检查结果 - 访问
http://应用地址:8080/业务接口路径,会自动跳转到HTTPS对应地址,或返回403错误 - 所有业务接口通过HTTPS访问可正常响应
内容的提问来源于stack exchange,提问作者user0000001
相关产品推荐
相关产品推荐

