diff options
author | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2022-10-14 13:45:42 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2022-10-14 13:48:15 +0200 |
commit | 7aa11f583303a6753342b10cc7882064cce27b9a (patch) | |
tree | a3464bfab8938680b9a4405f2e77be1bae772de1 /container-core/src/main/java/com | |
parent | b10ceeae0a947779890143bdac774b6425931cdc (diff) |
Ignore virtual host configuration for health checks if connector match
Diffstat (limited to 'container-core/src/main/java/com')
2 files changed, 37 insertions, 12 deletions
diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectorSpecificContextHandler.java b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectorSpecificContextHandler.java new file mode 100644 index 00000000000..3554d371cf8 --- /dev/null +++ b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectorSpecificContextHandler.java @@ -0,0 +1,35 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.jdisc.http.server.jetty; + +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.handler.ContextHandler; + +import java.util.List; + +/** + * @author bjorncs + */ +class ConnectorSpecificContextHandler extends ContextHandler { + + private final JDiscServerConnector connector; + + ConnectorSpecificContextHandler(JDiscServerConnector c) { + this.connector = c; + List<String> allowedServerNames = c.connectorConfig().serverName().allowed(); + if (allowedServerNames.isEmpty()) { + setVirtualHosts(new String[]{"@%s".formatted(c.getName())}); + } else { + String[] virtualHosts = allowedServerNames.stream() + .map(name -> "%s@%s".formatted(name, c.getName())) + .toArray(String[]::new); + setVirtualHosts(virtualHosts); + } + } + + @Override + public boolean checkVirtualHost(Request req) { + // Accept health checks independently of virtual host configuration when connector matches + if (req.getRequestURI().equals("/status.html") && req.getHttpChannel().getConnector() == connector) return true; + return super.checkVirtualHost(req); + } +} diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java index 37546d734f0..775c903f5f8 100644 --- a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java +++ b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java @@ -231,18 +231,8 @@ public class JettyHttpServer extends AbstractServerProvider { return h; } - private static ContextHandler newConnectorContextHandler(JDiscServerConnector connector) { - ContextHandler ctxHandler = new ContextHandler(); - List<String> allowedServerNames = connector.connectorConfig().serverName().allowed(); - if (allowedServerNames.isEmpty()) { - ctxHandler.setVirtualHosts(new String[]{"@%s".formatted(connector.getName())}); - } else { - String[] virtualHosts = allowedServerNames.stream() - .map(name -> "%s@%s".formatted(name, connector.getName())) - .toArray(String[]::new); - ctxHandler.setVirtualHosts(virtualHosts); - } - return ctxHandler; + private static ContextHandler newConnectorContextHandler(JDiscServerConnector c) { + return new ConnectorSpecificContextHandler(c); } private static HealthCheckProxyHandler newHealthCheckProxyHandler(List<JDiscServerConnector> connectors) { |