描述:启动 EMR 集群时,每个应用程序都配置为公开其 UI。
目标:通过 Nginx 使用友好的 URL(无端口号)访问 UI
细节:
- 每个 UI 位于不同的端口上
- 基本身份验证(htpass)
- 一些 UI 会将您重定向到 EMR 主服务器的私有 DNS 记录(可以手动修复它们,需要 Nginx 来执行此操作)
- UI端口:8088,8890,8888,18080,50070
做了什么?
A)关注本文我们可以访问 Zeppelin
B) 我们尝试修改该配置以允许更多位置 其背后的逻辑是,通过这样做,我们可以使用“/somename”访问 nginx,并使用“upstream”重定向到 EMR 主机上的相关端口,但遗憾的是它不起作用。
location /hadoop {
proxy_pass hxxp://hadoop
}
C)我们尝试重写规则,但一旦我们
rewrite ^/hadoop(.*)$ /$1 permenant;
其下/somename
实际上是:
location /
问题:如何使用简单友好的 URL(例如 hxxp://mynginx/hadoop)来访问 UI?
例如:
http://nginx/app
应重定向至http://upstream-server:8088
答案1
因此,如果我理解正确的话,您有一个location
这样的块:
location /hadoop {
rewrite ^/hadoop(.*) /$1 permanent;
proxy_pass http://hadoop;
}
上述语句将 301 Moved Permanently 响应发送回浏览器,并遵循您编写的规则。因此,当您访问 时,rewrite
用户将被重定向到 URI 。/
/hadoop
你最有可能想要的是这个:
location ~ ^/hadoop(.*)$ {
proxy_pass http://hadoop$1;
}
这里我们将之后的部分捕获/hadoop
到一个变量中,然后将该变量与proxy_pass
目标一起使用。
但是,您仍然需要修复 Hadoop 后端在其 HTML 代码中发送回客户端的 URL,否则它不会返回带有/hadoop
前缀的 URL。