Github user okoethibm commented on a diff in the pull request:
https://github.com/apache/spark/pull/17455#discussion_r109588861
--- Diff: core/src/main/scala/org/apache/spark/deploy/master/Master.scala
---
@@ -132,7 +132,13 @@ private[deploy] class Master(
webUi.bind()
masterWebUiUrl = "http://" + masterPublicAddress + ":" +
webUi.boundPort
if (reverseProxy) {
- masterWebUiUrl = conf.get("spark.ui.reverseProxyUrl", masterWebUiUrl)
+ conf.getOption("spark.ui.reverseProxyUrl") map { reverseProxyUrl =>
+ val proxyUrlNoSlash = reverseProxyUrl.stripSuffix("/")
+ System.setProperty("spark.ui.proxyBase", proxyUrlNoSlash)
+ // If the master URL has a path component, it must end with a
slash.
+ // Otherwise the browser generates incorrect relative links
+ masterWebUiUrl = proxyUrlNoSlash + "/"
--- End diff --
If we have a front-end reverse proxy path like
mydomain.com:80/path/to/spark, then the spark.ui.proxyBase property (prefix for
URL generation) *must not* include a trailing slash, the way it's used in
UiUtils, like prependBaseUri("/static/bootstrap.min.css").
However, the explicit URL address pointing to the master UI page (e.g. the
back-lilnk from workers to master, which masterWebUiUrl feeds into) *must*
include a trailing slash, if it has a path component, because the master UI
page contains relative liks like "app?...".
Without a path component, the trailing slash does not matter for resolving
these links, but with a path component, they must resolve to
mydomain.com:80/path/to/spark/app (*not* mydomain.com:80/path/to/app),
therefore the base URL must have a trailing slash.
The code is intended to work regardless whether spark.ui.reverseProxyUrl
was specified with or without a trailing slash, so the safe way to ensure a
single trailing slash was to first strip an optional slash and then add one.
Your suggestion would double the slash if there is one specified in the config.
If there's a clean way to move the stripSuffix handling into the config
itself, that would make the code prettier, though
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]