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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:30:04