2017-08-30 131 views
0

我有星火2.1.1独立的集群中运行Nginx的背后与代理下列相关配置:错误CSS位置

spark-defaults.conf

spark.ui.reverseProxy  true 
spark.ui.reverseProxyUrl http://<mydomain>/spark 

在nginx的站点配置

location /spark/ { 
    proxy_pass http://spark-master:8080/; 
    proxy_set_header Accept-Encoding ''; 
    sub_filter '/static/' '/spark/static/'; 
    sub_filter '/proxy/' '/spark/proxy/'; 
    sub_filter_once off; 
} 

当我访问应用程序的用户界面的网页,例如以下:

http://<my domain>/spark/proxy/app-20170831014128-0000/jobs/ 

他们看起来很杂乱,因为他们被设置为错误的位置及其相关的CSS和Javascript文件无法找到,比如下面的CSS文件:

http://<my domain>/spark/proxy/app-20170831014128-0000/spark/static/bootstrap.min.css 

我认为它应该被设置为以下位置:

http://<my domain>/spark/static/bootstrap.min.css 

所以此刻,我的工作围绕它通过添加rewrite指令上的nginx如下:

location /spark/ { 
    rewrite ^/spark/proxy/(.*)/spark/static/(.*) /spark/static/$2 last; 
    proxy_pass http://spark-master:8080/; 
    . 

即围绕一个快速和肮脏的工作。由于在搜索互联网之后到目前为止我找不到更好的解决方案,所以我怀疑可能是我的设置有问题。

没有任何人有任何建议在哪里看?或者这是Spark上的一个已知问题?

非常感谢您的帮助。

回答

0

spark-defaults.conf附加:

spark.ui.proxyBase /spark

,并删除此上nginx的站点配置:

sub_filter '/static/' '/spark/static/';

裁判:https://github.com/apache/spark/blob/a2c7b2133cfee7fa9abfaa2bfbfb637155466783/core/src/main/scala/org/apache/spark/ui/UIUtils.scala#L150

编辑:

添加我的完整配置,它适用于我在版本2.2.0。

spark-defaults.conf配置:

spark.ui.proxyBase     /sparkui 
spark.ui.reverseProxy    true 
spark.ui.reverseProxyUrl   https://<domain>/sparkui 

nginx的配置:

location /sparkui/ { 
    proxy_pass http://<master>:8080/; 
    proxy_set_header Accept-Encoding ''; 
    sub_filter '="/proxy/' '="/sparkui/proxy/'; 
    sub_filter_once off; 
} 

,我发现这个PR https://github.com/apache/spark/pull/17455,它固定反向代理路径问题。这个PR可能会合并到2.3.0。另一种方法是https://github.com/aseigneurin/spark-ui-proxy,但我不尝试。

+0

非常感谢eshizhan。在应用您的建议后,我不再需要'rewrite'指令。我实际上已经搜索过“APPLICATION_WEB_PROXY_BASE”或“spark.ui.proxyBase”的用法,但我找不到任何有关如何设置它的文档。我想我试图把它设置为'http:// /spark',但它不起作用,所以我删除它。我只有6点声望,所以我似乎无法投我的票,说你的答案是有用的。 – Anto

+0

该建议实际上会破坏其他CSS位置,例如**工人ID **网址的CSS文件。这是由于在nginx配置中删除了'sub_filter'/ static /''/ spark/static /';'。但是当我再次添加该sub_filter时,它甚至会打破主页面,因为主页面的相同CSS变成了'http:// /spark/spark/static/bootstrap.min.css'(注意双**火花* *)。我可以用'rewrite'指令来解决这个问题,比如'rewrite ^/static /(.*)/ spark/static/$ 1 last;',但是它非常难看,因为它必须位于'location/spark /'之外,应用程序在同一个域上。 – Anto

+0

更新我的回答以添加一些研究。 – eshizhan

0

我目前的解决方案基本上遵循从eshizhan有如下一些修改的建议:

spark-defaults.conf

spark.ui.reverseProxy  true 
spark.ui.proxyBase  /spark 
spark.ui.reverseProxyUrl http://<my domain> 

在nginx的站点配置

location /spark/ { 
    proxy_pass http://spark-master:8080/; 
    proxy_set_header Accept-Encoding ''; 
    sub_filter '/proxy/' '/spark/proxy/'; 
    sub_filter '">Back to Master<' '/spark/">Back to Master<'; 
    sub_filter_once off; 
} 

它仍然看起来丑陋的似乎没有意义设置spark.ui.reverseProxyUrl和破解回到主人 URL。但至少几乎所有的网址现在都正确地在我的浏览器上呈现。

有没有人有其他建议?