diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2022-10-14 16:25:07 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-14 16:25:07 +0200 |
commit | 86eda2f92b594723b679ca137eae847c4668456c (patch) | |
tree | c62856ed789e6f7ed23c9eea70cc31551ec2a570 /container-core | |
parent | 46dbafa9243cc5d76367d9d14e9798b88c9635d6 (diff) | |
parent | 7aa11f583303a6753342b10cc7882064cce27b9a (diff) |
Merge pull request #24449 from vespa-engine/bjorncs/jetty-virtual-hosts
Bjorncs/jetty virtual hosts
Diffstat (limited to 'container-core')
2 files changed, 37 insertions, 9 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 2d80fabd949..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,15 +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 { - ctxHandler.setVirtualHosts(allowedServerNames.toArray(new String[0])); - } - return ctxHandler; + private static ContextHandler newConnectorContextHandler(JDiscServerConnector c) { + return new ConnectorSpecificContextHandler(c); } private static HealthCheckProxyHandler newHealthCheckProxyHandler(List<JDiscServerConnector> connectors) { |