Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Docker容器中运行时,如何配置Apache NiFi NiFi.web.proxy.host?_Docker_Nginx_Reverse Proxy_Apache Nifi - Fatal编程技术网

在Docker容器中运行时,如何配置Apache NiFi NiFi.web.proxy.host?

在Docker容器中运行时,如何配置Apache NiFi NiFi.web.proxy.host?,docker,nginx,reverse-proxy,apache-nifi,Docker,Nginx,Reverse Proxy,Apache Nifi,我已经使用命令成功地在容器中启动了apachenifi docker run --name nifi -p 9090:9090 -d -e NIFI_WEB_HTTP_PORT='9090' apache/nifi:latest 并且可以连接到http://localhost:9090/nifi-但是,我的公司只允许子网之间的HTTPS连接,因此我使用Nginx使用以下配置将HTTPS调用反向代理到NiFi容器: location /nifi/ { proxy_set_header X

我已经使用命令成功地在容器中启动了apachenifi

docker run --name nifi -p 9090:9090 -d -e NIFI_WEB_HTTP_PORT='9090' apache/nifi:latest
并且可以连接到
http://localhost:9090/nifi
-但是,我的公司只允许子网之间的HTTPS连接,因此我使用Nginx使用以下配置将HTTPS调用反向代理到NiFi容器:

location /nifi/ {
    proxy_set_header X-ProxyScheme "https";
    proxy_set_header X-ProxyHost "mercury-dev";
    proxy_set_header X-ProxyPort "443";
    proxy_set_header X-ProxyContextPath "/nifi/";
    proxy_pass http://mercury-dev:9090/nifi/;
}
location /nifi-docs/ {
    proxy_set_header X-ProxyScheme "https";
    proxy_set_header X-ProxyHost "mercury-dev";
    proxy_set_header X-ProxyPort "443";
    proxy_set_header X-ProxyContextPath "/nifi-docs/";
    proxy_pass http://mercury-dev:9090/nifi-docs/;
}
location /nifi-api/ {
    proxy_set_header X-ProxyScheme "https";
    proxy_set_header X-ProxyHost "mercury-dev";
    proxy_set_header X-ProxyPort "443";
    proxy_set_header X-ProxyContextPath "/nifi-api/";
    proxy_pass http://mercury-dev:9090/nifi-api/;
}
当我浏览到
https://mercury-dev/nifi
从远程机器上,NiFi UI开始加载,然后失败。屏幕上的错误显示发生了意外错误。请查看日志了解更多详细信息。和Chrome开发者控制台报告:

/nifi-api/access/kerberos:1 Failed to load resource: the server responded with a status of 409 (Conflict)
/nifi-api/access/oidc/exchange:1 Failed to load resource: the server responded with a status of 409 (Conflict)
/nifi-api/flow/about:1 Failed to load resource: the server responded with a status of 500 (Internal Server Error)
/nifi-api/flow/process-groups/root:1 Failed to load resource: the server responded with a status of 500 (Internal Server Error)
当我登录到容器并查看日志文件时,我看到一些错误,例如,
ERROR[NiFi Web Server-21]org.apache.NiFi.Web.util.WebUtils提供的上下文路径[/NiFi api]未被列入白名单

我在中找到了使用
nifi.web.proxy.host
nifi.web.proxy.context.path
属性白名单主机和内容的引用,但我找不到如何执行此操作的说明

  • 在容器中没有可用于编辑属性文件的编辑器(无论如何,这是非常糟糕的做法)
  • 文档提到通过UI上的全局菜单设置它们,但我看不到明显的选项
  • 我可能能够向容器命令行提供环境变量,但找不到执行此操作的任何参考,因此也找不到要使用的变量名

如何设置这些属性,或者以其他方式使此容器在HTTPS代理后运行?

Docker容器不会公开此用例需要直接修改的所有设置,因此您有一些选项(响应编号点)

(常规)看起来您为多个上下文路径提供了配置,但不是根路径(
/
)。正如文档中所述,NiFi应用程序中有许多组件上下文路径,因此当将其置于代理之后时,应该代理根路径

  • 正确,基本Docker图像中没有编辑器。您可以在此基础上构建自己的图像(使用编辑器或自定义属性/脚本来处理此场景)
  • 您链接到的文档正在讨论向外部代理授予转发请求的权限。您可以在NiFi中添加代理的用户身份,以通过UI授予其权限。这与识别NiFi应用程序的代理服务(NiFi.properties设置)是分开的。无法配置通过UI列出的这两个设置
  • 当前Docker文件列出Docker映像此时接受的环境变量。若要添加更多,请提交PR或请求改进
    Koji Kawamura已经为NiFi提供了一个反向代理,您可能会感兴趣

    我只需要在Apache反向代理服务器上处理nifi 1.11.4的代理问题,而我不能盲目地重定向
    /
    。您的配置几乎正确

    键是
    X-ProxyContextPath
    。NiFi希望它与自己的根上下文相对应。在您的情况下,应该是
    /
    (因为后端NiFi进程需要
    /NiFi
    /NiFi api
    ,等等)


    如果您试图从子路径提供服务,比如说
    /my/fancy/context/nifi
    ,那么您应该将
    X-ProxyContextPath
    设置为
    /my/fancy/context
    ,并将
    nifi.properties
    中的
    nifi.web.proxy.context.path
    设置为
    /my/fancy/context
    。注意,从反向代理子路径提供NiFi在1.11.4中被破坏,并在1.12.0中被修复。最后,即使在1.12.0中,从子路径为NiFi提供服务时,LDAP登录重定向也存在一个挥之不去的错误。

    一个问题-为什么不直接启用HTTPS来运行NiFi以避免完全需要代理?感谢Andy-我们运行了许多容器,并使用Nginx将代理反向到所有容器(在某些情况下还有负载平衡)-我希望我的Nifi设置适合该基础设施。我在dockerhub文档()中找到了环境变量Nifi_WEB_PROXY_CONTEXT_PATH和Nifi_WEB_PROXY_HOST()并尝试了它们,但仍然收到消息说路径“Nifi”未被列入白名单等。查看代码,这些属性仅在安全Nifi安装中生效;在我上面链接的文档中,只有在安全安装中才需要白名单。但我运行的是香草,没有安全性,只是试图建立一个环境。到目前为止,我们还没有找到任何指向问题或解决方案的指针。我仍然认为问题在于您没有代理根路径。如果您提供一个单一的Nginx配置来代理
    /
    ,而不是3个
    /nifi/
    /nifi docs/
    /nifi api/
    ,会发生什么?谢谢您的建议-是的,我看过的一些帖子(包括Koji Kawamura的配置)假设您可以代理根目录,但是在我们的例子中,Nginx代理了许多其他容器,例如/api/client是客户机api容器,所以直到现在我才能够做到这一点。我已经为Nifi请求了此服务器的特定DNS别名-然后我将能够设置新的服务器定义并代理根。感谢您的帮助,Andy,这里有一些有用的信息,我已经通过代理根路径使其正常工作。不太理想,但现在就可以了。