我想使用 https nginx 来代理在同一台机器中运行的非安全 nifi 服务器。
到目前为止,我最接近的方法是使用这种配置:
location ^~ /nifi {
proxy_set_header X-ProxyHost localhost;
proxy_set_header X-ProxyPort 6969;
proxy_set_header X-ProxyContextPath /nifi;
proxy_pass http://localhost:6969/nifi;
}
在 nifi 中我遇到异常:
2018-11-24 17:40:19,473 ERROR [NiFi Web Server-20] o.a.nifi.web.api.config.ThrowableMapper An unexpected error has occurred:
javax.ws.rs.core.UriBuilderException: The provided context path [/nifi] was not whitelisted []. Returning Internal Server Error response.
javax.ws.rs.core.UriBuilderException: The provided context path [/nifi] was not whitelisted []
at org.apache.nifi.web.util.WebUtils.verifyContextPath(WebUtils.java:152)
at org.apache.nifi.web.util.WebUtils.getResourcePath(WebUtils.java:125)
at org.apache.nifi.web.api.ApplicationResource.buildResourceUri(ApplicationResource.java:159)
at org.apache.nifi.web.api.ApplicationResource.generateResourceUri(ApplicationResource.java:141)
at org.apache.nifi.web.api.ProcessorResource.populateRemainingProcessorEntityContent(ProcessorResource.java:107)
at org.apache.nifi.web.api.ProcessorResource.populateRemainingProcessorEntitiesContent(ProcessorResource.java:95)
at org.apache.nifi.web.api.FlowResource.populateRemainingFlowStructure(FlowResource.java:200)
at org.apache.nifi.web.api.FlowResource.populateRemainingFlowContent(FlowResource.java:187)
at org.apache.nifi.web.api.FlowResource.getFlow(FlowResource.java:373)
有什么提示吗?
答案1
只需更新您的proxy_pass
即可删除nifi
后缀。
location ^~ /nifi {
proxy_set_header X-ProxyHost localhost;
proxy_set_header X-ProxyPort 6969;
proxy_set_header X-ProxyContextPath /nifi;
proxy_pass http://localhost:6969;
}
nginx 会将整个内容附加$uri
到proxy_pass
URL 中,因此 nginx 会转发到http://本地主机:6969/nifi/nifi/... 代替http://本地主机:6969/nifi/...
答案2
答案补充多于,尝试添加X-ProxyScheme
标题。
此外,如果您正在宣传您的网站以供外部访问,请将 修改X-ProxyHost
为您的 LAN 可访问 IP 地址或 Internet 可访问域名。(mynifiwebaccess.com
即10.51.102.9
)
location ^~ /nifi {
proxy_set_header X-ProxyScheme https;
proxy_set_header X-ProxyHost mynifiwebaccess.com;
proxy_set_header X-ProxyPort <externally_advertised_port_number>;
proxy_set_header X-ProxyContextPath /nifi;
proxy_pass http://localhost:6969;
}
我不确定您的配置,但您可以尝试使externally_advertised_port
上面代码的端口号有所不同,因为 NiFi 可能正在运行并使用端口6969
。
答案3
错误消息:javax.ws.rs.core.UriBuilderException:提供的上下文路径[/nifi]未列入白名单[]。
这是由于 nifi.web.proxy.context.path 设置不正确造成的。
检查文档: