nginx 代理 - aws emr 集群

nginx 代理 - aws emr 集群

描述:启动 EMR 集群时,每个应用程序都配置为公开其 UI。

目标:通过 Nginx 使用友好的 URL(无端口号)访问 UI

细节:

  1. 每个 UI 位于不同的端口上
  2. 基本身份验证(htpass)
  3. 一些 UI 会将您重定向到 EMR 主服务器的私有 DNS 记录(可以手动修复它们,需要 Nginx 来执行此操作)
  4. 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。

相关内容