说明:启动EMR集群时,每个应用程序都configuration为公开其UI。
目标:使用不带端口号的友好URL通过Nginx访问UI
细节:
- 每个用户界面都在不同的端口上
- 基本authentication(htpass)
- 有些用户界面会将您redirect到EMR主机的private-dns-record(可以手动修复它们,需要Nginx来做)
- UI端口:8088,8890,8888,18080,50070
已经做了什么?
A)按照这篇文章,我们可以访问Zeppelin
B)我们试图修改这个configuration以允许更多的位置这背后的逻辑就是通过这样做,我们可以用'/ somename'来访问nginx,并且使用'upstream'redirect到EMR master的相关端口,但是很遗憾不行。
location /hadoop { proxy_pass hxxp://hadoop }
C)我们尝试了重写规则,但一旦我们把
rewrite ^/hadoop(.*)$ /$1 permenant;
在/somename它实际上是:
location /
问题:我们如何使用简单友好的URL(例如hxxp:// mynginx / hadoop)来访问UI?
例如:
http://nginx/app应该redirect到http://upstream-server:8088
所以,如果我理解正确,你有这样的location块:
location /hadoop { rewrite ^/hadoop(.*) /$1 permanent; proxy_pass http://hadoop; }
上面的rewrite语句用你写的规则向浏览器发送一个301 Moved Permanently响应。 因此,当你访问/hadoop时,用户被redirect到/ URI。
最有可能你想这个:
location ~ ^/hadoop(.*)$ { proxy_pass http://hadoop$1; }
在这里,我们将/hadoop之后的部分捕获到一个variables中,然后将这个variables与proxy_pass目的地一起使用。
但是,您仍然需要修复Hadoop后端以其HTML代码发送回客户端的URL,否则不会返回带有/hadoop前缀的URL。