nginx代理 – aws emr集群

说明:启动EMR集群时,每个应用程序都configuration为公开其UI。

目标:使用不带端口号的友好URL通过Nginx访问UI

细节:

  1. 每个用户界面都在不同的端口上
  2. 基本authentication(htpass)
  3. 有些用户界面会将您redirect到EMR主机的private-dns-record(可以手动修复它们,需要Nginx来做)
  4. 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。