2017-08-30 130 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。但至少幾乎所有的網址現在都正確地在我的瀏覽器上呈現。

有沒有人有其他建議?